2016-11-16 74 views
1

我使用AES的在線工具進行encrpyt。我正在使用我的模塊進行解密。但我得到的結果不一樣。爲什麼?NodeJS aes解密不起作用

我使用的那些工具加密之一:

這是我所提供的數據:

  • 這是爲了encrpyt文本: Hello World
  • 這是密碼:12345
  • 這是該工具的結果:U2FsdGVkX19HLG+YDMe3kYl+MYwEMlnC5mK78s3rZZg=

現在,我嘗試使用節點解密它,它不給我相同的結果。但一切工作welll

var crypto = require('crypto'), 
    algorithm = 'aes-128-ctr', 
    password = '12345'; 

module.exports.decrypt=function(text){ 
    var decipher = crypto.createDecipher(algorithm,password) 
    var dec = decipher.update(text,'base64','utf8') 
    dec += decipher.final('utf8'); 
    return dec; 
} 

text=module.exports.decrypt('U2FsdGVkX1+OOp0KE3lv6qcKQeS/JDFPF8YhgdU131o=') 
text 

我試圖更改爲AES-192,並得到了相同的問題。


更新:(基於zaph響應)

這是我這裏輸入新的數據:https://www.tools4noobs.com/online_tools/encrypt/

  • 鍵:ABCDEF(16個字節)的Rijndael-128。模式:CBC。編碼:十六進制。
  • 這是結果:8b25e846b6a2d52ad87f38f8134906c3

我無法解密它。這裏是我的代碼:

var crypto = require('crypto'), 
    algorithm = 'aes-128-cbc', 
    password = 'abcdef'; 

module.exports.decrypt=function(text){ 
    var decipher = crypto.createDecipher(algorithm,password) 
    var dec = decipher.update(text,'hex','utf8') 
    dec += decipher.final('utf8'); 
    return dec; 
} 
if(!module.parent){ 
    var text=module.exports.decrypt('8b25e846b6a2d52ad87f38f8134906c3') 
    console.log(text) 
} 

回答

1

使用的加密密鑰是爲了避免非標填充的確切長度(沒有關於處理不正確長度的密鑰標準)。 AES支持128個192位和256位長度的密碼(16,24和32個字節)。顯然12345不符合支持的密碼長度。

通常最好不要使用CTR模式,很容易弄錯。問題是相同的密鑰和計數器必須重複使用永不。通常CBC模式與隨機IV一起使用,PKCS#7填充用於容納不是塊大小倍數的輸入。

輸出U2FsdGVkX19HLG+YDMe3kYl+MYwEMlnC5mK78s3rZZg=是基本編碼的32字節,是塊大小的兩倍,所以除了輸出中的加密數據之外還有別的東西。

在CTR模式下在Rijndael-128(即AES)中輸入密碼和文本到https://www.tools4noobs.com/online_tools/encrypt/時產生53TI1is8kfYkztQ=,而不是問題中的結果。請注意,這個工具使用的mcrypt只支持非標準的填充。

+0

謝謝你的信息。我正在做的任何事我都無法成功解密它NodeJS。我把這些數據放在網站上:使用鍵:abcdef(16字節)Rijndael-128。模式:CBC。編碼:十六進制。這是結果:8b25e846b6a2d52ad87f38f8134906c3 – Aminadav

+0

這是我的代碼:http://pastebin.com/MBpz1vL1我無法解密我在網站中加密的數據。爲什麼? – Aminadav

+0

使用CBC模式,您還需要提供16字節的IV。 – zaph

0

這是我在NodeJS中用於加密和解密AES-256的最終代碼。使用IVkeypassword)。

var crypto = require('crypto') 
var algorithm = 'aes-128-cbc' 
var key = 'AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' 
var iv = 'AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB' 

key=new Buffer(key,'hex') 
iv=new Buffer(iv,'hex') 

module.exports.encrypt=function(text){ 
    var cipher = crypto.createCipheriv(algorithm,key,iv) 
    text=new Buffer(text) 
    var crypted = cipher.update(text,'utf-8','base64') 
    crypted += cipher.final('base64'); 
    return crypted; 
} 

module.exports.decrypt=function(text){ 
    var decipher = crypto.createDecipheriv(algorithm,key,iv) 
    dec = decipher.update(text,'base64','utf-8'); 
    dec += decipher.final(); 
    return dec; 
} 
if(!module.parent){ 
    var enc=module.exports.encrypt('Exaxmple of encoding') 
    console.log(enc) 
    var dec=module.exports.decrypt(enc) 
    console.log(dec) 
}