从64位块大小的des中获得192位密码

本文关键字:192位 密码 des 64位 | 更新日期: 2023-09-27 18:10:56

我想知道,在DES中块大小为64位(8字节)时,是否有可能扩展密码字节长度?

它是这样的,当输入Blocksize<=64bits时,由于DES中的PaddingMode.PKCS7,密码大小肯定是128bits。下面的代码是我所说的一个例子。

   static void Main(string[] args)
    {
            Console.WriteLine("Original String: ");
            string originalString = Console.ReadLine();
            string cryptedString = Encrypt(originalString);
            Console.WriteLine("Encrypt Result: " +cryptedString);
    }
    public static string Encrypt(string originalString)
    {
        const string AesIV = "!QAZ2WSX";
        const string AesKey = "5TGB&YHN";
        byte[] input_text = Encoding.UTF8.GetBytes(originalString);

        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        des.BlockSize = 64;
        des.IV = Encoding.UTF8.GetBytes(AesIV);
        des.Key = Encoding.UTF8.GetBytes(AesKey);
        des.Mode = CipherMode.CBC;
        des.Padding = PaddingMode.PKCS7;

        ICryptoTransform des_demo = des.CreateEncryptor();
        byte[] encrypted = des_demo.TransformFinalBlock(input_text , 0, input_text.Length );
        string encrypt = Convert.ToBase64String(encrypted );
        return encrypt;
    }

但是我想从相同的输入Blocksize中获得比128bits(特别是192bits)更多的密码大小,这是<=64bits。我怎么才能做到呢?是否有办法将输出密码大小固定为24字节?

从64位块大小的des中获得192位密码

这个问题很容易解决。只需将UTF8更改为Unicode即可。现在,每个输入数据字符都是2byte而不是1byte。因此,8byte(64位)输入将是16byte(128位),当PKCS#716byte数据中使用时,它将变成24byte(192位)。这就是从64bit输入中获得192bit密码的方法。