Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解密AES CBC?_C#_Encryption_Aes - Fatal编程技术网

C# 如何解密AES CBC?

C# 如何解密AES CBC?,c#,encryption,aes,C#,Encryption,Aes,我曾经测试解密AES CBC 以下是我的参数: 这项工作。然后我用C#实现。我的代码: using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Web; namespace HHT.Module.eWallet.Helper { public class AESHelper

我曾经测试解密AES CBC

以下是我的参数:

这项工作。然后我用C#实现。我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace HHT.Module.eWallet.Helper
{
    public class AESHelper
    {
        private AesCryptoServiceProvider _aes;
        private ICryptoTransform _crypto;

        public AESHelper(string key, string IV)
        {
            _aes = new AesCryptoServiceProvider();
            _aes.BlockSize = 128;
            _aes.KeySize = 256;
            _aes.Key = ASCIIEncoding.ASCII.GetBytes(key);
            if (!string.IsNullOrEmpty(IV)) {
                _aes.IV = ASCIIEncoding.ASCII.GetBytes(IV);
            }
        
            _aes.Padding = PaddingMode.PKCS7;
            _aes.Mode = CipherMode.CBC;
        }

        public string encrypt(string message)
        {
            _crypto = _aes.CreateEncryptor(_aes.Key, _aes.IV);
            byte[] encrypted = _crypto.TransformFinalBlock(
                ASCIIEncoding.ASCII.GetBytes(message), 0, ASCIIEncoding.ASCII.GetBytes(message).Length);
            _crypto.Dispose();
            return System.Convert.ToBase64String(encrypted);
        }

        public string decrypt(string message)
        {
            _crypto = _aes.CreateDecryptor(_aes.Key, _aes.IV);
            byte[] decrypted = _crypto.TransformFinalBlock(
                System.Convert.FromBase64String(message), 0, System.Convert.FromBase64String(message).Length);
            _crypto.Dispose();
            return ASCIIEncoding.ASCII.GetString(decrypted);
        }
    }
}  
函数
decrypt
不起作用,它返回了错误的字符串。我认为有些参数与图片不一样

Base64编码的加密数据:

5qG6aB4UZ6bnbbPgFhnC+qp/FJ7ZuZ+fg1cYm+OUM1uP/6PyWfLg0w5bJstmBf2W
关键:


您需要将IV初始化为全零,否则它将以随机值开始:

if(!string.IsNullOrEmpty(IV))
{
_aes.IV=ascienceoding.ASCII.GetBytes(IV);
}
其他的
{
_aes.IV=新字节[_aes.BlockSize/8];
}
有了此修复程序,它将获得与您使用的在线站点相同的性能


还要注意,您的问题是ECB,但您的代码和屏幕截图使用CBC(它是AES,而不是ACS)。

您需要将IV初始化为全零,否则它将以随机值开始:

if(!string.IsNullOrEmpty(IV))
{
_aes.IV=ascienceoding.ASCII.GetBytes(IV);
}
其他的
{
_aes.IV=新字节[_aes.BlockSize/8];
}
有了此修复程序,它将获得与您使用的在线站点相同的性能


还要注意,您的问题是ECB,但您的代码和屏幕截图使用CBC(这是AES,不是ACS)。

这是工作,非常感谢兄弟!这是工作,非常感谢兄弟!
745d88b1e8f75d320c2bd9198c08485d