簡體   English   中英

如何在JavaScript中用加密js加密的節點js中解密字符串

[英]How to decipher string in node js which is encrypted in crypto js in javascript

我的客戶端代碼:

data.username = CryptoJS.AES.encrypt(user.username, "password");
data.password = CryptoJS.AES.encrypt(user.password, "password");

然后我將“數據”發送到express.js服務器

var user = req.body;
var decipher = crypto.createDecipher('aes256', "password");
var decrypted = decipher.update(user.username, 'hex', 'utf-8');
decrypted += decipher.final('utf-8'); 

我收到此錯誤:

Error: DecipherInit error
at new Decipher (crypto.js:368:17)
at Object.Decipher (crypto.js:365:12)

CryptoJS的帶密碼的encrypt函數使用相同的EVP_BytesToKey函數node.js的createCipher ,重要的區別在於CryptoJS使用隨機鹽來導出而node不使用 (強調我):

注意:createCipher使用OpenSSL函數EVP_BytesToKey導出密鑰,並將摘要算法設置為MD5,一次迭代,並且沒有salt

您可以在可能的節點中直接使用CryptoJS,因為CryptoJS沒有任何依賴關系,或者您自己在兩端進行密鑰派生並使用crypto.createCipheriv 如果使用前者,則必須另外將用戶名和密碼加密的內容傳遞給節點。

請注意, data.username是包含salt和IV的CryptoJS cipherParams對象,但是當您將其轉換為帶有data.username.toString()字符串時,不再包含salt了,但是IV了。 這不是data ,你會投入Node.js的功能。 而是發送data.username.ciphertext

暫無
暫無

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

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