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