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