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

时间:2014-07-01 16:30:59

标签: c# encryption des

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

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

   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;
    }

但是我希望从此代码128bits的同一输入192bits中加密Blocksize(特别是<=64bits)。我怎么能这样做?有没有办法将输出密码大小修复为24字节?

1 个答案:

答案 0 :(得分:-2)

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