我正在使用 NodeJS 开发一个使用 C#API 的应用程序。我想使用 AES 实施安全化的调用。我在 NodeJS 中使用AesJS,在 C#中使用System.Security.Cryptography。
C#部分在应用程序的其他部分中使用并且可以正常工作,所以我猜我的错误是在 NodeJS 部分中。
错误是:
Base-64 char数组或字符串的长度无效。
我的代码:
NodeJS
encryptData = function(data) {
var key = pbkdf2.pbkdf2Sync(config.aes.pass, config.aes.salt, 1, 128 / 8, null);
var dataBytes = aesjs.utils.utf8.toBytes(data);
var ivBytes = aesjs.utils.utf8.toBytes(config.aes.iv);
var aesOfb = new aesjs.ModeOfOperation.ofb(key, ivBytes);
var encryptedBytes = aesOfb.encrypt(dataBytes);
var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
return encryptedHex;
}
C#
public static string DecodeAndDecrypt(string encrypted)
{
using (var csp = Aes.Create())
{
var d = GetCryptoTransform(csp, false);
byte[] output = Convert.FromBase64String(encrypted);
byte[] decryptedOutput = d.TransformFinalBlock(output, 0, output.Length);
string decypted = Encoding.UTF8.GetString(decryptedOutput);
return decypted;
}
}
此行中发生错误:
byte []输出= Convert.FromBase64String(加密);
更新
为了测试评论,我在 NodeJS 中向base64添加了解析:
return Buffer.from(encryptedHex).toString('base64');
现在我要迈出一步:
byte [] unlockedOutput = d.TransformFinalBlock(output,0,output.Length);
它返回错误:
输入数据不是完整的块。