最近在项目中在接口中使用了Java中的Desede加密,
Java中的解密代码为:
// 解密
public static String decrypt(String src, String key) {
try {
// --通过 base64,将字符串转成 byte 数组
BASE64Decoder decoder = new BASE64Decoder();
byte[] bytesrc = decoder.decodeBuffer(src);
// --解密的 key
DESedeKeySpec dks = new DESedeKeySpec(key.getBytes("UTF-8"));
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DESede");
SecretKey securekey = keyFactory.generateSecret(dks);
// --Chipher 对象解密
Cipher cipher = Cipher.getInstance("DESede");
cipher.init(Cipher.DECRYPT_MODE, securekey);
byte[] retByte = cipher.doFinal(bytesrc);
return new String(retByte, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
网上查了一下DESede是简写,它与DESede/ECB/PKCS5Padding等价
对应c#中的ECB,PKCS7模式,C#对应的解密代码在网上找了一下,这个亲测可用:
public static string DESedeDecrypt(string data, string key)
{
SymmetricAlgorithm syag = new TripleDESCryptoServiceProvider();
syag.Mode = CipherMode.ECB;
syag.Padding = PaddingMode.PKCS7;
syag.Key = Encoding.UTF8.GetBytes(key);
// mCSP.IV = Encoding.UTF8.GetBytes(IV); ECB模式下IV无效,不用设置
byte[] byt;
ICryptoTransform ct = syag.CreateDecryptor(syag.Key, syag.IV);
byt = Convert.FromBase64String(data);
using (MemoryStream ms = new MemoryStream())
{
CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Encoding.UTF8.GetString(ms.ToArray());
}
}