簡體   English   中英

在.NET中使用零填充進行AES加密並使用Node.js解密

[英]AES encrypt in .NET with zero padding and decrypt with Node.js

我正在嘗試使用NodeJS解密一些數據。

該數據是使用C#和AES-CBC-256算法創建的。 keySize和blockSize為256,Padding為ZeroPadding

我無法使用Node.js對其進行解密,錯誤是:

Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

這是我的JavaScript代碼:

decipher = crypto.createDecipheriv('aes-256-cbc', key, iv.slice(0, 16));
decrypted = decipher.update(encryptedPayloadBuffer, 'base64', 'ascii');
decrypted += decipher.final('ascii');
decipher = null;

return decrypted;

我使用庫“ crypto”。 我在某處讀到node.js解密僅適用於PKSC7填充。 是真的嗎 我無法在C#項目中進行任何更改,必須在節點側找到解決方案。

你能幫我嗎 ?

編輯:我試圖禁用自動填充與此:

decipher.setAutoPadding(false);
//next line of code:
//decrypted = decipher.update(encryptedPayloadBuffer, 'base64', 'ascii');

但我收到此錯誤:

Error: error:0606508A:digital envelope routines:EVP_DecryptFinal_ex:data not multiple of block length

看看Crypto Node.js文檔會發現:

decipher.setAutoPadding(auto_padding = true)

如果數據已加密而沒有標准塊填充,則可以禁用自動填充,以防止decipher.final檢查和刪除數據。 僅當輸入數據的長度是密碼塊大小的倍數時才能工作。 您必須先調用此函數,然后再將數據流傳輸到decipher.update。

decipher.update.之前嘗試decipher.setAutoPadding(false) decipher.update.

AES和Rijndael之間有區別。 兩者都指定128、192和256位的密鑰大小,但是只有Rijndael提供所有三種塊大小:128、192和256位。 AES實際上是Rijndael,具有128位的固定塊大小。

Node.js使用OpenSSL提供所有可用的密碼( crypto.getCiphers() )。 如果您的版本沒有可用的rijndael實現,則不能使用node.js的Crypto模塊。 您要么需要找到一個實現Rijndael的節點模塊,要么只需在C#代碼中將塊大小設置為128位即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM