2017-11-15 21 views
1

CryptoJS 암호화 된 문자열은 파이썬에서 다른 매개 변수를 전달할 수있는 유일한 문자열을 전달할 수 있습니까? 어떻게 파이썬 에서 두 번째 CryptoJS 구현을 구현하는 방법 clientKey2를 얻으려면, 이것은 첫 번째 결과를 제공합니다. 감사합니다!CryptoJS HmacSHA256 암호화 결과가 파이썬과 다릅니다

> saltedPassword=CryptoJS.PBKDF2("key", "salt", {keySize: 8,iterations:500,hasher: CryptoJS.algo.SHA256});  
> clientKey1=CryptoJS.HmacSHA256(saltedPassword.toString(), "Client Key") 
> clientKey2=CryptoJS.HmacSHA256(saltedPassword, "Client Key") 
> clientKey1.toString() 
> "857ef8988876a3bb6bcadb85ca257787074e73e830d7dc14c1f838ba46aef1f5" 
> clientKey2.toString() 
> "9a8574da9b276ee1162dcb92071df587f4513bc03060bda1e9b3897d46233416" 
> saltedPassword.toString() 
> "6e441ccd26e6b35198b4b17457dc0266d36b751d0062b5850b0e302ceb1d6dcc" 

내가 clientKey1를 얻을 수있는이 방법을 사용 ,

import hashlib 
import hmac 

def HmacSHA256(k,v): 
    message = bytes(k).encode('utf-8') 
    secret = bytes(v).encode('utf-8') 
    signature = hmac.new(secret, message, digestmod=hashlib.sha256).hexdigest() 
    return signature 

signature = HmacSHA256("6e441ccd26e6b35198b4b17457dc0266d36b751d0062b5850b0e302ceb1d6dcc","Client Key") 

print signature 
, 파이썬에 감사를 두 번째 결과를 얻을하는 방법

!

+0

안녕하세요. 질문은 코드를 기반으로합니다. ** 코드를 게시하기 전에 ** 귀하의 문제를 설명하십시오 **. 코드 자체를 소개하고 코드 자체에 대해 설명하십시오. 끝 부분에 특정 질문을 추가하여 질문을 마무리 할 수 ​​있습니다. 어쨌든 좋은 질문을하는 방법에 대해서는 [이 페이지] (https://stackoverflow.com/help/how-to-ask)를 읽으십시오. –

답변

1

clientKey2을 얻으려면 saltedPassword 문자열의 16 진수를 바이트로 인코딩해야합니다. Python 2 & Python 3에서 작동하는 한 가지 방법은 binascii.unhexlify을 사용하는 것입니다.

HmacSHA256 기능이 약간 이상합니다. bytes 개체에는 .encode 메서드가 없으므로 Python 3에서는 작동하지 않습니다. Python 2에서 bytesstr의 동의어입니다.

어쨌든

, 여기에 두 파이썬에서 2 & 파이썬 3를 작동하는 코드이다

from __future__ import print_function 
import hashlib 
import hmac 
import binascii 

key = "Client Key".encode() 
salted = "6e441ccd26e6b35198b4b17457dc0266d36b751d0062b5850b0e302ceb1d6dcc" 
raw = binascii.unhexlify(salted) 

signature = hmac.new(key, salted.encode(), digestmod=hashlib.sha256).hexdigest() 
print(signature) 

signature = hmac.new(key, raw, digestmod=hashlib.sha256).hexdigest() 
print(signature) 

출력

857ef8988876a3bb6bcadb85ca257787074e73e830d7dc14c1f838ba46aef1f5 
9a8574da9b276ee1162dcb92071df587f4513bc03060bda1e9b3897d46233416 

출력은 파이썬에 동일 2 & 파이썬 3

BTW, 파이썬 3에서이 작업을 수행하는 것이 더 간단 할 것입니다. 텍스트와 바이트 문자열 사이의 n. 또한 Python 3 hashlib 모듈의 글꼴은 pbkdf2 function입니다.