【发布时间】:2023-01-31 18:22:02
【问题描述】:
我正在尝试实施 AES GCM 模式加密。在我的应用程序中,加密发生在 C# 代码中的角度和解密中。 iam 在角度中使用 nodejs 加密库进行加密
Angular 中的加密代码
data = "{hello world}";
var randomIV = CryptoJS.lib.WordArray.random(12).toString();
const ALGO = 'aes-256-gcm';
var forge = require('node-forge');
// encrypt some bytes using GCM mode
var cipher = forge.cipher.createCipher('AES-GCM', _dEncP);
cipher.start({
iv: randomIV, // should be a 12-byte binary-encoded string or byte buffer
additionalData: 'nvn', // optional
tagLength: 128 // optional, defaults to 128 bits
});
cipher.update(forge.util.createBuffer('object' == typeof data ? JSON.stringify(data) : data.toString()));
cipher.finish();
var encryptedData = cipher.output;
const encodedB64 = forge.util.encode64(encryptedData.data);
const tag = cipher.mode.tag;
const tagB64 = forge.util.encode64(tag.data);
// outputs encrypted hex
const trasmitmsg = randomIV + "|" + tagB64 + "|" + encodedB64;
在 C# 中,我正在尝试使用 system.crypto 库
C#中的解密代码
string[] data = cipherText.Split("|");
String ivString = data[0];
String additionalString = data[1];
String cipherString = data[2];
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] ivBytes = Convert.FromBase64String(ivString);
byte[] encdata = Convert.FromBase64String(cipherString);
byte[] tag = Convert.FromBase64String(additionalString);
var aesAlg = new AesGcm(keyBytes);
var plaintextBytes = new byte[encdata.Length];
aesAlg.Decrypt(ivBytes, encdata, tag, plaintextBytes);
var result = Encoding.UTF8.GetString(plaintextBytes)
当我运行这段代码时,出现以下错误 System.Security.Cryptography.CryptographicException:“计算的身份验证标签与输入的身份验证标签不匹配。”
你能帮我看看我在这里做错了什么吗,你有角度(加密)和 c#(解密代码)的示例工作示例吗
【问题讨论】:
标签: angular aes c#-3.0 aes-gcm