100¥现金求一个用 php 实现的能与 Java/.Net 互通的 DES 加密算法

2014-05-13 14:45:40 +08:00
 wannianchuan
要求:

用加密KEY: SpanDivAHFont0531
 加密算法:DES
 加密编码:Base64
将 371325751788249 加密后能得到 sWql7JYSxGRhqgjOfx+9gQ==

该加密结果已通过下面的.Net代码验证

有能解的朋友请加QQ:279443771 ,注明:des加密
也可点击网站上的QQ号直接发消息: http://wannianchuan.net/
加密结果通过验证后立即付款。

参考:
.Net代码

public static class DES
{
//默认密钥向量
private static byte[] Keys = { 1, 2, 3, 4, 5, 6, 7, 8 };
public static string Encode(string encryptString, string encryptKey)
{
encryptKey = encryptKey.Substring(0, 8);
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
dCSP.Key = rgbKey;
dCSP.IV = Keys;
dCSP.Padding = PaddingMode.PKCS7;
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Convert.ToBase64String(mStream.ToArray());
}

public static string Decode(string decryptString, string decryptKey)
{
try
{
decryptKey = decryptKey.Substring(0, 8);
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
byte[] inputByteArray = Convert.FromBase64String(decryptString);
DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
DCSP.Key = rgbKey;
DCSP.IV = Keys;
DCSP.Padding = PaddingMode.PKCS7;

MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(), CryptoStreamMode.Write);
cStream.Write(inputByteArray, 0, inputByteArray.Length);
cStream.FlushFinalBlock();
return Encoding.UTF8.GetString(mStream.ToArray());
}
catch(Exception ex)
{
return ex.Message;
}
}

string a = DES.Encode("371325751788249", "SpanDivAHFont0531");
Response.Write(a + "<br>" + DES.Decode(a,"SpanDivAHFont0531"));
//// sWql7JYSxGRhqgjOfx+9gQ==
//// 371325751788249


另外附上Java代码:

private static byte[] iv = { 1, 2, 3, 4, 5, 6, 7, 8 };
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKeySpec key = new SecretKeySpec(getKey(encryptKey.getBytes()), "DES");
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
byte[] encryptedData = cipher.doFinal(encryptString.getBytes());
return Base64.encode(encryptedData);
1049 次点击
所在节点    外包
8 条回复
explon
2014-05-13 15:37:04 +08:00
首信易支付 SDK 里面有
wannianchuan
2014-05-13 15:44:04 +08:00
@explon 在网上找了好多代码 都不行 我去看看你说的这个
wannianchuan
2014-05-13 16:30:32 +08:00
@explon 首信易支付 SDK在那里正找到,我在他们网站上没找到呢
Sunyanzi
2014-05-13 16:51:22 +08:00
刚好有点时间 ... 这事儿我接了吧 ... 先占坑 ... 等等补代码 ...
Sunyanzi
2014-05-13 17:09:39 +08:00
done ...

https://gist.github.com/qex/0632281caaaa3bb2a163

以及钱就算了 ... 不差这一百块钱 ...
sun019
2014-05-13 18:23:15 +08:00
孙燕姿 果然不差钱 不错!!
wannianchuan
2014-05-14 10:34:52 +08:00
@Sunyanzi 多谢,我试一下
wannianchuan
2014-05-14 10:36:34 +08:00
@Sunyanzi 真高人也,问题解决了,再次感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/112352

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX