Angular ASP.net内核中的加密和ASP.net内核中的解密

Angular ASP.net内核中的加密和ASP.net内核中的解密,angular,asp.net-core,encryption,aes,cryptojs,Angular,Asp.net Core,Encryption,Aes,Cryptojs,我在“ASP.net核心中的加密和角度中的解密”中面临问题。 我想从我的BE发送敏感信息到FE,所以我尝试添加加密和解密 我的ASP加密代码是: public static string EncryptString(string key, string plainText) { byte[] iv = new byte[16]; byte[] array; using (Aes aes = Aes.Crea

我在“ASP.net核心中的加密和角度中的解密”中面临问题。 我想从我的BE发送敏感信息到FE,所以我尝试添加加密和解密

我的ASP加密代码是:

public static string EncryptString(string key, string plainText)
        {
            byte[] iv = new byte[16];
            byte[] array;

            using (Aes aes = Aes.Create())
            {
                aes.Key = Encoding.UTF8.GetBytes(key);
                aes.IV = iv;
                aes.Padding = PaddingMode.PKCS7;
                aes.Mode = CipherMode.CBC;

                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

                using (MemoryStream memoryStream = new MemoryStream())
                {
                    using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter streamWriter = new StreamWriter((Stream)cryptoStream))
                        {
                            streamWriter.Write(plainText);
                        }

                        array = memoryStream.ToArray();
                    }
                }
            }

            return Convert.ToBase64String(array);
        }
我解密的角度代码是:(使用crypto js进行解密)

运行代码后,我会遇到如下错误:

错误:格式错误的UTF-8数据 在Object.stringify(core.js:513) 在WordArray.init.toString(core.js:268) 在

谢谢。

C代码在CBC模式下使用AES,零向量为IV和PKCS7填充。密文是Base64编码的。对于以下示例数据,将生成以下Base64编码的密文:

string key = "01234567890123456789012345678901"; // 32 bytes key, corresponds to AES-256
string plaintext = "The quick brown fox jumps over the lazy dog";
string encrypted = EncryptString(key, plaintext);
Console.WriteLine(encrypted); // NsFJlGQScUEazmSEykVeO/lh+o2L5ykFd2hkNa5lVrHACwKfTg1pD/uYzjTfjmQO
CryptoJS默认使用CBC模式和PKCS7填充。重要的是,
CryptoJS.AES.decrypt
中的密钥应作为
WordArray
传递,否则它将被解释为密钥最初来源的密码。Base64编码的密文可以直接传递
CryptoJS.AES.decrypt
返回必须用Utf8解码的
WordArray
。对于从和到
WordArray
s的转换,CryptoJS具有编码器。以下CryptoJS代码允许解密:

函数解密数据(密钥,密文B64){//Base64编码密文,32字节字符串作为密钥
var key=CryptoJS.enc.Utf8.parse(key);//转换为WordArray(使用Utf8)
var iv=CryptoJS.lib.WordArray.create([0x00,0x00,0x00,0x00]);//使用零向量作为iv
var decrypted=CryptoJS.AES.decrypt(ciphertextB64,密钥,{iv:iv});//默认情况下:CBC,PKCS7
返回解密的.toString(CryptoJS.enc.Utf8);//转换为字符串(使用Utf8)
}
var ciphertextB64=“NsFJlGQScUEazmSEykVeO/lh+o2L5ykFd2hkNa5lVrHACwKfTg1pD/uYzjTfjmQO”;
var key=“01234567890123456789012345678901”;
var decrypted=解密数据(密钥,密文B64);
console.log(已解密);//敏捷的棕色狐狸跳过了懒狗

你知道https,对吗?@MikeOne我知道一点,但在这种情况下,我想在浏览器的“网络”选项卡中隐藏该数据,所以我要对其进行加密。你的ASP代码在CBC模式下使用AES,其中涉及一个初始化向量(“iv”)。在Angular上,同一个iv必须用于解密,但我没有看到任何“iv”?@MichaelFehr我在代码中添加了iv,但错误仍然是一样的,所以我删除了它。CryptoJS.AES.decrypt(加密,密钥,{iv:iv,padding:CryptoJS.pad.Pkcs7,mode:CryptoJS.mode.CBC}非常感谢。这段代码工作得非常好。我在这个问题上花了太多时间。谢谢你澄清了概念!谢谢!
string key = "01234567890123456789012345678901"; // 32 bytes key, corresponds to AES-256
string plaintext = "The quick brown fox jumps over the lazy dog";
string encrypted = EncryptString(key, plaintext);
Console.WriteLine(encrypted); // NsFJlGQScUEazmSEykVeO/lh+o2L5ykFd2hkNa5lVrHACwKfTg1pD/uYzjTfjmQO