我试图将代码移植到java,但想知道这在C#中是如何工作的。 正在使用keySize = 192初始化Provider,但密钥只有16个字节长。 在java中执行此操作时,我收到有关错误密钥大小的错误。
有人能解释一下这里发生了什么吗?
public static byte[] TripleDesEncryptOneBlock(byte[] plainText)
{
//This is key of length 16 bytes (128 bits)
byte[] key = Encoding.ASCII.GetBytes("0123456789abcdef");
byte[] result;
try
{
int count = (plainText.Length > 8) ? 8 : plainText.Length;
byte[] array = new byte[8];
Buffer.BlockCopy(plainText, 0, array, 0, count);
ICryptoTransform cryptoTransform = new TripleDESCryptoServiceProvider
{
KeySize = 192,
Key = key,
Mode = CipherMode.ECB,
Padding = PaddingMode.None
}.CreateEncryptor();
byte[] array2 = cryptoTransform.TransformFinalBlock(array, 0, 8);
result = array2;
}
catch (Exception)
{
result = null;
}
return result;
}
答案 0 :(得分:1)
它将密钥的前8个字节复制到密钥的末尾。 TDEA标准称之为“键控选项2”,它只提供80位有效安全性(即,它是一个弱密码)。
许多Java提供商不会自动执行此操作;通过强制应用程序明确地执行它,不太可能回退到较弱的方案。