2014-05-09 79 views
1

我正在爲我的node.js項目集成一個支付網關。他們有python集成套件,我沒有太多的經驗。我將他們的變化從python移植到了javascript。它是否正確 ?Node.js - 加密

Python代碼:

def encrypt(plainText,workingKey): 
     iv = 'hello' 
     encDigest = md5.new() 
     encDigest.update(workingKey) 
     enc_cipher = AES.new(encDigest.digest(), AES.MODE_CBC, iv) 
     encryptedText = enc_cipher.encrypt(plainText).encode('hex') 
     return encryptedText 

移植的代碼(Node.js的):

function encrypt(plainText, workingKey){ 
    var iv = 'hello'; 
    var encDigest = crypto.createHash('md5'); 
    encDigest.update(workingKey); 
    var enc_cipher = crypto.createCipheriv('aes-256-cbc', encDigest, iv); 
    var encryptedText = enc_cipher.encrypt(plainText).encode('hex'); 
    return encryptedText; 

} 
+0

它看起來相同,但有些問題:md5不應該用於安全應用IMO。而且我不確定'iv'是否應該不是一個靜態值......就像支付是非常敏感的; – DanFromGermany

+1

IV應該永遠不要是靜態的,實際上應該儘可能隨機,並且應該爲每個加密而改變。當然要解密,你應該使用與加密相同的IV。加密後,它可以公開,而不會影響安全性。通常它以密文爲前綴。 –

+0

你有沒有試過隨機測試,看看你是否從python和js版本得到相同的密文輸出? – Paul

回答

1

是它不工作?我能看到的唯一可能的問題是異步與同步。例如,當encDigest.update(workingKey);被觸發時,var encDigest = crypto.createHash('md5');可能無法解析。