2017-11-15 8 views
1

暗号化されたCryptoJS暗号化された文字列は、Pythonで異なるパラメータを渡すことができますか? 2番目のCryptoJS実装をPythonで実装する方法 、clientKey2を取得する方法、これは最初の結果しか得られません。ありがとうございます!CryptoJS HmacSHA256暗号化の結果はPythonと異なります

> 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 
、Pythonで感謝を2番目の結果を得るためにどのように

+0

ようこそ。あなたは、コードに大きく依存しています。 **コードを投稿する前に**あなたの問題を説明してください。コード自体を紹介し、コードの内容を説明します。最後に特定の質問を追加して質問を確定することができます。いずれにせよ、良い質問をする方法については、[このページ](https://stackoverflow.com/help/how-to-ask)を必ず読んでください。 –

答えて

1

clientKey2を取得するには、saltedPassword文字列の16進数をバイトにエンコードする必要があります。 Python 2 & Python 3で動作する方法の1つはbinascii.unhexlifyです。

HmacSHA256の機能が少し奇妙です。 bytesオブジェクトには.encodeメソッドがないため、Python 3では動作しません。 Python 2ではbytesstrと同義語です。

とにかく、ここではPython 2 &の両方で動作するいくつかのコードだPythonの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 

出力は、出力は、Python 2 &のPythonに3

同じです

ところで、このタスクをPython 3で行う方が簡単です。これはクリーンなdistinctioテキストとバイト文字列の間のn。また、Python 3 hashlibモジュールにはpbkdf2 functionがあります。

関連する問題