C# 从des中的64位块大小获取192位密码

C# 从des中的64位块大小获取192位密码,c#,encryption,des,C#,Encryption,Des,我想知道,当DES中的块大小为64位(8字节)时,是否可以扩展密码字节长度 它是这样的,当输入块大小为时,这个问题可以很容易地解决。只需将UTF8更改为Unicode即可。现在,每个输入数据字符都将是2字节而不是1字节。因此,8byte(64位)输入将是16byte(128位),当PKCS#7用于16byte数据时,它将变成24byte(192bit)。这是从64位输入获取192bit密码的方法 这个问题解决了。请不要再回答了。这不是你的决定,吉利维德。这个论坛的理念是,每个人都可以使用问答并从

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


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

这个问题解决了。请不要再回答了。这不是你的决定,吉利维德。这个论坛的理念是,每个人都可以使用问答并从中学习。其他答案可能会在任何时候给出。答案和问题甚至可能被修改。如果你认为Unicode(或任何其他编码)与密码的输出有关,那你就错了。输入、输出、键(以及其他可能的参数,如IV)始终定义为位。通常它们当然是以八位字节(通常称为字节)的形式实现的。从这个意义上讲,你正在读的论文是不正确的;它将输入/输出称为字符。这是他们的许多错误之一。这通常是因为C/C++(基于)语言将字节称为
char
。Java和C#都在这两种思想之间使用了正确的分隔。这个问题和用字符回答错误的位/字节。
   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;
    }