C# 从des中的64位块大小获取192位密码
我想知道,当DES中的块大小为64位(8字节)时,是否可以扩展密码字节长度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密码的方法 这个问题解决了。请不要再回答了。这不是你的决定,吉利维德。这个论坛的理念是,每个人都可以使用问答并从
它是这样的,当输入
块大小为时,这个问题可以很容易地解决。只需将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;
}