2016-09-28 202 views
0

您好我使用這種加密方法在.NET側AES加密和解密空加字節

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); 
     } 
    } 

的json值加密和即時通訊試圖解密在節點的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; 
+0

你不應該張貼代碼爲圖像。請[編輯]您的問題以包含node.js代碼。 –

回答

2

您正在將要加密的文本轉換爲Unicode,這意味着UTF-16。 在UTF-16中,每個字符由兩個字節組成。如果第二個字節沒有被使用,那麼它就像你所觀察到的那樣是空的。

我假設你想要UTF-8編碼。因此更換線

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

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

(UTF-16碼點也可以是4個字節) –

+0

哦,當然!非常感謝您節省了我的一天! –