2017-05-18 105 views
1

我試圖將一些NodeJS代碼移植到Python 3,但在獲取SHA1散列時行爲不一致。NodeJS和Python散列之間的區別

這段代碼在每種語言顯示問題:

的NodeJS

var crypto = require('crypto'); 
crypto.createHash('sha1'); 
var h = crypto.createHash('sha1'); 
h.update(new Buffer('pXHepU2vIdYJuIAN', 'base64').toString('binary')); 
console.log(h.digest('hex')); // ea70f5b1ec762290cefd37bc0f9a7421dcc93466 

的Python 3

import hashlib 
import base64 
h = hashlib.sha1() 
h.update(base64.b64decode(b'pXHepU2vIdYJuIAN')) 
print(h.hexdigest()) # 74161d2d37d9fff312dd396d5f779133c4bfd88d 

我想我通過Python的輸入錯誤格式,就像我從它匹配的NodeJS代碼中刪除.toString('binary')一樣。

任何人都可以向我解釋Python代碼應該是什麼,以及他們爲什麼行爲不同?

+0

比較散列之前的數據,尋找任何空格或換行符。 –

回答

1

蟒蛇像這樣的代碼:

import hashlib 
import base64 

h = hashlib.sha1() 
h.update(base64.b64decode(b'pXHepU2vIdYJuIAN').decode('latin1').encode()) 
print(h.hexdigest()) #result is ea70f5b1ec762290cefd37bc0f9a7421dcc93466 

我都提到了這個問題Nodejs crypto vs python hashlib

希望它可以幫助你。

相關問題