aspnet core加密和解密字符串

w2o*_*ves 9 c# encryption asp.net-core

我试图使用一些非常标准的算法解密字符串.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直收到错误:

System.Security.Cryptography.CryptographicException:指定的填充模式对此算法无效.

我尝试了多种这样的方法

var iv = new byte[16];
var cipher = new byte[16];
Run Code Online (Sandbox Code Playgroud)

要么

var iv = aesAlg.IV;
Run Code Online (Sandbox Code Playgroud)

此时我仍然收到错误.我究竟做错了什么 ?

小智 1

需要进行两处更改

var cipher = new byte[fullCipher.Length - iv.Length];
Run Code Online (Sandbox Code Playgroud)

Buffer.BlockCopy(fullCipher, iv.Length, cipher, 0, fullCipher.Length - iv.Length);
Run Code Online (Sandbox Code Playgroud)