Шифрование DES в Java и .NET - почему разные?

У меня есть метод .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, параллельно с этой функцией, так что если вы предоставите тот же ключ шифрования и инициализацию vector, вы сможете расшифровать на Java то, что было зашифровано на C #. (Одевается в комбинезон Java, отстирается около 10 лет с момента последнего использования Java, Googles для шифрования DES в Java ... )

Здесь нашел достойный подход к шифрованию Java DES . Но - о боже, оказывается, что этот алгоритм настаивает на векторе инициализации ровно 8 байтов; код .NET использует вектор инициализации размером 24 байта!

Что теперь? Почему Java настаивает на 8-байтовом векторе инициализации? И как я могу расшифровать то, что было зашифровано с помощью 24-байтового вектора инициализации?

5
задан Community 23 May 2017 в 12:02
поделиться