2014-10-09 2 views
0

에서 생성합니다. javascript에서 hmac 해시를 생성하려고합니다. 여기 자바에서 Hmac을 파이썬 코드

내가 자바 스크립트에서 복제 할 몇 가지 파이썬 코드입니다 : 이것은 내가 지금까지 무엇을 가지고

mac = hmac.new("33fsfsdgvwrg2g223f4f42gf4f34f43f", digestmod=hashlib.sha1) 
mac.update(method) 
mac.update(url) 
mac.update(data) 
mac.update(str(timestamp)) 

r = requests.request(method, url, data=data, headers={ 
    'Content-Type': 'application/json', 
    'Authorization': " signature="'mac.hexdigest()'" ", 
}) 

, 그리고 내가 필요로하지 않는 것 :

var message = "shah me"; 
var secret = "33fsfsdgvwrg2g223f4f42gf4f34f43f"; 
var crypto = CryptoJS.HmacSHA1(message, secret).toString(CryptoJS.enc.Base64); 

var shaObj = new jsSHA('shah me', "ASCII"); 
var jssha = shaObj.getHMAC('33fsfsdgvwrg2g223f4f42gf4f34f43f', "ASCII", "SHA-1", "B64"); 

답변

2

그것을 귀하의 "현재 솔루션"처럼 보입니다.

어쨌든 CryptoJS와 jsSHA를 모두 사용할 필요는 없습니다. 하나 골라서 붙어 있어야합니다.

the docs에 따르면 python mac.update 함수는 메시지에 데이터를 추가하는 것과 같습니다. CryptoJS도 jsSHA도 동등한 업데이트 기능을 가지고 있지는 않지만 대신에 전체 메시지가 있어야하기 때문에 이것이 문제의 핵심이라고 생각합니다.

다음 파이썬 코드를 다음과 자바 스크립트 코드는 동일합니다 자바 스크립트 코드에 전체 메시지 ('methodurldatatimestamp')를 박았

<script src="sha.js"></script> 
<script> 
    var secret = '33fsfsdgvwrg2g223f4f42gf4f34f43f'; 
    var message = 'methodurldatatimestamp'; 
    var shaObj = new jsSHA(message, "ASCII"); 
    document.write(shaObj.getHMAC(secret, "ASCII", "SHA-1", "HEX")); 
</script> 

참고 :

여기
import hashlib 
import hmac 

method = 'method' 
url = 'url' 
data = 'data' 
timestamp = 'timestamp' 

mac = hmac.new("33fsfsdgvwrg2g223f4f42gf4f34f43f", digestmod=hashlib.sha1) 
mac.update(method) 
mac.update(url) 
mac.update(data) 
mac.update(timestamp) 

print mac.hexdigest() 

는 자바 스크립트입니다 jsSHA 생성자. 나는 이것이 당신의 문제의 열쇠라고 믿습니다. 희망이 도움이!