C#三重DES有两个密钥加密(c# Triple DES encryption with two k

2019-10-22 10:24发布

我有一个十六进制字符串有两个密钥进行加密。 我给这家代码看起来像这样:

public byte[] TripleDes(byte[] inputBuffer, byte[] key)
{
    byte[] result;

    using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
    using (MemoryStream stream = new MemoryStream())
    using (CryptoStream cryptoStream = new CryptoStream(stream, des.CreateEncryptor(), CryptoStreamMode.Write))
    {
       des.Key = key;
       // des.KeySize = 128;   <- wrong, overrides the values of the key
       des.Mode = CipherMode.ECB;
       des.Padding = PaddingMode.None;

       cryptoStream.Write(inputBuffer, 0, inputBuffer.Length);
       cryptoStream.FlushFinalBlock();
       result = stream.ToArray();
    }

    return result;
}

被设置的关键是16个字节和由两个部分组成:第一部分=密钥来加密,第二部分=密钥来解密。 该INPUTBUFFER是8个字节。 当我做了加密这样的,我的成绩是16个字节而不是8个字节。 我究竟做错了什么?

Answer 1:

检查stream.Length 。 使用该功能可以改变流字节数组

 public static byte[] ReadFully(Stream input)
        {
            if (input is MemoryStream)
            {
                return ((MemoryStream)input).ToArray();
            }
            else
            {
                return ReadFully(input);
            }
        }


Answer 2:

该代码是正确的,但为了不。 所述“CreateEncryptor()”方法instanziated后“TripleDESCryptoServiceProvider”实例的配置发生了。 所以,正确的代码是:

public byte[] TripleDes(byte[] inputBuffer, byte[] key)
{
    using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
    {
        des.Key = key;
        des.Mode = CipherMode.ECB;
        des.Padding = PaddingMode.None;

        byte[] result;

        using (MemoryStream stream = new MemoryStream())
        using (CryptoStream cryptoStream = new CryptoStream(stream, des.CreateEncryptor(), CryptoStreamMode.Write))
        {
            cryptoStream.Write(inputBuffer, 0, inputBuffer.Length);
            cryptoStream.Flush();
            //cryptoStream.FlushFinalBlock();
            result = stream.ToArray();
        }

        return result;
    }
}

在“同花顺()”和“FlushFinalBlock()”方法的返回两个相同的结果,除了“FlushFinalBlock”有8个字节,我不需要,我不知道它是什么额外的数据。



文章来源: c# Triple DES encryption with two keys