C#TripleDESCryptoServiceProvider - 它如何可以使用短键

时间:2016-08-09 05:03:27

标签: c# cryptography 3des

我试图将代码移植到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;
}

1 个答案:

答案 0 :(得分:1)

它将密钥的前8个字节复制到密钥的末尾。 TDEA标准称之为“键控选项2”,它只提供80位有效安全性(即,它是一个弱密码)。

许多Java提供商不会自动执行此操作;通过强制应用程序明确地执行它,不太可能回退到较弱的方案。