【发布时间】:2017-05-01 22:05:07
【问题描述】:
我正在尝试使用一些非常标准的算法来解密字符串。
public static string DecryptString(string cipherText)
{
string keyString = string.Empty;
// Check whether the environment variable exists.
keyString = Environment.GetEnvironmentVariable("EncryptKey");
if (keyString == null)
{
keyString = "E546C8DF278CD5931069B522E695D4F2";
}
var fullCipher = Convert.FromBase64String(cipherText);
using (var aesAlg = Aes.Create())
{
byte[] iv = new byte[aesAlg.BlockSize / 8];
var cipher = new byte[16];
Buffer.BlockCopy(fullCipher, 0, iv, 0, iv.Length);
Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, iv.Length);
var key = Encoding.UTF8.GetBytes(keyString);
string result;
using (var decryptor = aesAlg.CreateDecryptor(key, iv))
using (var msDecrypt = new MemoryStream(cipher))
using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (var srDecrypt = new StreamReader(csDecrypt))
{
result = srDecrypt.ReadToEnd();
}
return result;
}
}
我不断收到错误:
System.Security.Cryptography.CryptographicException:指定的填充模式对此算法无效。
我已经尝试了多种这样的方法
var iv = new byte[16];
var cipher = new byte[16];
或者
var iv = aesAlg.IV;
此时我仍然收到错误消息。我做错了什么?
【问题讨论】:
-
消息是怎么加密的,什么语言和实现如PHP mcrypt
-
[@w2olves] 你解决了吗?
-
@Eris 这不是重复的 1) 这是 AES,那不是。 2)如果我们定义密钥长度为 15,那么我们得到了密钥大小异常,但是 16 我们得到了其他异常(这个填充的东西,问题是关于什么的)
-
通过更改
cipher的值并更改此链接中提到的第二个Buffer.BlockCopy语句可解决此问题:stackoverflow.com/a/46541503/4745542
标签: c# encryption asp.net-core