我有一個字符串做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