【发布时间】:2014-03-20 08:45:35
【问题描述】:
使用以下解密方法后,我得到的字符串长度错误。
public static string DecryptRJ256(string prm_key, string prm_iv, string prm_text_to_decrypt) {
string sEncryptedString = prm_text_to_decrypt;
RijndaelManaged myRijndael = new RijndaelManaged();
myRijndael.Padding = PaddingMode.Zeros;
myRijndael.Mode = CipherMode.CBC;
myRijndael.KeySize = 256;
myRijndael.BlockSize = 256;
byte[] key = Encoding.ASCII.GetBytes(prm_key);
byte[] IV = Encoding.ASCII.GetBytes(prm_iv);
ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, IV);
byte[] sEncrypted = Convert.FromBase64String(sEncryptedString);
byte[] fromEncrypt = new byte[sEncrypted.Length];
MemoryStream msDecrypt = new MemoryStream(sEncrypted);
CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return (Encoding.ASCII.GetString(fromEncrypt));
}
例如:
string ID = "yUFYhclPyPubnhMZ+SHJb1wrt44pao3B82jdbL1ierM=";
string finalID = DecryptRJ256(sKy, sIV, ID);
Response.Write(finalID); \\200905410 (**this is correct**)
Response.Write(finalID.Length); \\32 (**this should be 9**)
我做错了什么?
【问题讨论】:
-
不确定,但对我来说,这听起来像是添加填充字符来完成块大小。你能检查一下你是否将 finalID 转换为 Char 数组,最终位置的值是什么?
-
我已经试过了,前9个字符是ID,但剩下的数组字符是空的。
-
为空还是 Ascii 值为 0?尝试将这些字符之一转换为 int。
-
当我通过 Convert.ToInt32 传递字符(EMPTY)时,我得到 0。
-
使用像 PKCS7 这样的适当填充模式怎么样?如果输入可以包含零字节,则无法可靠地删除零填充,因此 .net 不会自动删除它。
标签: c# asp.net encryption string-length