que tienen un método .NET para hacer cifrado DES en una cadena:Encriptación DES en Java vs .NET - ¿por qué diferente?
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 "";
}
}
Como se ve, el algoritmo toma 2 parámetros - una "clave de cifrado" y un "vector de inicialización".
Ahora necesito escribir una función de cifrado/descifrado DES en Java, paralela a esta función, de modo que si proporciona la misma clave de cifrado y vector de inicialización, podrá descifrar en Java algo cifrado en C# . (Pone un overol de Java, desempolva unos 10 años desde la última vez que usó Java, Googles para el cifrado DES en Java ...)
Encontré un enfoque de cifrado DES decente de Java here. Pero, vaya, resulta que este algoritmo insiste en un vector de inicialización de exactamente 8 bytes; ¡el código .NET usa un vector de inicio de 24 bytes!
¿Ahora qué? ¿Por qué Java insiste en un vector de inicio de 8 bytes? ¿Y cómo puedo descifrar algo que fue encriptado usando un vector de inicio de 24 bytes?
Si va a cifrar estos datos porque se necesita seguridad y que requieren el uso de una versión de DES, me gustaría ir con TripleDES que es 168 bits, en lugar de DES estándar que es de 56 bits. El DES estándar es simplemente demasiado fácil de descifrar si tiene datos que deben ser seguros por algún motivo. – FreeAsInBeer