У меня есть метод .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 "";
}
}
Как видите, алгоритм принимает 2 параметра - «ключ шифрования» и «вектор инициализации».
Теперь мне нужно написать функцию шифрования / дешифрования DES в Java, параллельно с этой функцией, так что если вы предоставите тот же ключ шифрования и вектор инициализации, вы сможете дешифровать в Java то, что было зашифровано в C #. (Надевает спецодежду Java, проходит около 10 лет с момента последнего использования Java, Googles для шифрования DES в Java ...)
Найден достойный подход шифрования Java DES здесь . Но, о боже, получается, что этот алгоритм требует вектора инициализации ровно 8 байтов; код .NET использует вектор инициализации размером 24 байта!
И что теперь? Почему Java настаивает на 8-байтовом векторе инициализации? И как я могу расшифровать то, что было зашифровано с помощью 24-байтового вектора инициализации?