AesJS与C#System.Security.Cryptography之间的兼容性

时间:2019-03-08 09:41:14

标签: c# node.js aes

我正在使用 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);

它返回错误:

  

输入数据不是完整的块。

0 个答案:

没有答案