我有一个字符串做DES加密的.NET方法:Java与.NET中的DES加密 - 为什么不同?
public static string EncryptTripleDES(string value, byte[] encryptionKey, byte[] initializationVector) {
if (!value.IsNullOrEmpty()) {
TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(encryptionKey, initializationVector), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cs);
sw.Write(value);
sw.Flush();
cs.FlushFinalBlock();
ms.Flush();
//convert back to a string
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
} else {
return "";
}
}
正如你看到的,算法需要两个参数 - 一个“加密密钥”和“初始化向量”。
现在我需要在Java中编写一个DES加密/解密函数,并行执行此功能,这样,如果您提供相同的加密密钥和初始化向量,则可以在Java中解密使用C# 。 (提供Java工作服,自上次使用Java之后约10年的灰尘,Java中用于DES加密的Googles ...)
找到了体面的Java DES加密方法here。但是 - 哦,亲爱的,事实证明,这个算法坚持一个正好8个字节的初始化向量; .NET代码使用24个字节的init向量!
现在呢?为什么Java坚持一个8字节的初始化向量?我该如何解密使用24字节初始化向量加密的内容?
如果你正在加密这个数据,因为你需要安全性,并且你需要使用DES的一个版本,我会使用168位的TripleDES,而不是56位的标准DES。如果您的数据因任何原因需要安全,标准DES很容易被破解。 – FreeAsInBeer 2011-05-19 15:46:54