Aes Encrypt和Decrypt null添加字节

时间:2016-09-28 10:43:57

标签: c# node.js encryption encoding cryptography

您好我正在使用此加密方法来加密.net端的json值

public static string Encrypt256(string text)
    {
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
        aes.BlockSize = 128;
        aes.KeySize = 256;
        aes.IV = Encoding.UTF8.GetBytes(AesIV256);
        aes.Key = Encoding.UTF8.GetBytes(AesKey256);
        aes.Mode = CipherMode.CBC;

        byte[] src = Encoding.Unicode.GetBytes(text);

        using (ICryptoTransform encrypt = aes.CreateEncryptor())
        {
            byte[] dest = encrypt.TransformFinalBlock(src, 0, src.Length);
            Debug.WriteLine(Convert.ToBase64String(dest));
            return Convert.ToBase64String(dest);
        }
    }

我试图在Node Js端解密它

var crypto = require('crypto'),
  algorithm = process.env.tombalaCryptoAlgorithm,
  password = process.env.tombalaHmacPass,
  iv = '!QAZ2WSX#EDC4RFV'
function encrypt(text) {
  var cipher = crypto.createCipheriv(algorithm, password, iv)
  var encrypted = cipher.update(text, 'utf8', 'base64')
  encrypted += cipher.final('base64');
  return encrypted;

1 个答案:

答案 0 :(得分:2)

您要将要加密的文字转换为Unicode,这意味着UTF-16。 在UTF-16中,每个字符由两个字节组成。如果没有使用第二个字节,则如您所见,它为空。

我假设你想要UTF-8编码。因此,替换

byte[] src = Encoding.Unicode.GetBytes(text);

byte[] src = Encoding.UTF8.GetBytes(text);