我实现了代码加密和解密方法。输入字符串值传递给encrypt方法并获取存储在xml文件中的加密值。在我使用Decrypt方法读取值来获取加密值来读取xml文件之后。我很少遇到错误(加密输入值不正确和解密输出值)。我该如何解决这个问题。请分享给我。 这里是示例代码
public static string Decrypt(string cipherText)
{
try
{
string incoming = cipherText.Replace('_', '/').Replace('-', '+');
switch (cipherText.Length % 4)
{
case 2: incoming += "=="; break;
case 3: incoming += "="; break;
}
byte[] initVectorBytes = Encoding.ASCII.GetBytes(initVector);
byte[] cipherTextBytes = Convert.FromBase64String(incoming);
PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null);
byte[] keyBytes = password.GetBytes(keysize / 8);
RijndaelManaged symmetricKey = new RijndaelManaged();
symmetricKey.Mode = CipherMode.CBC;
ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
MemoryStream memoryStream = new MemoryStream(cipherTextBytes);
CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
memoryStream.Close();
cryptoStream.Close();
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
catch (Exception ex)
{
return "Exception";
}
}
答案 0 :(得分:0)
您正在手动添加填充到数据的末尾,如果您在解密器上没有反转,那么它将无法工作(必须在您之前执行的脚本之后添加)。
但是,也就是说,填充是不必要的,AES256需要填充数据,是的,但是cryptostream会为你做到这一点,所以如果删除所有填充内容它将起作用。
答案 1 :(得分:0)
使用修剪()功能并移除所有白色空间
存在空格时可能会发生此问题。 使用Trim()函数删除空格。
示例 - :cipherText.Trim()