CryptoJS加密字符串可以在python中传递不同的参数只能传递一个字符串吗?如何在python中实现第二个CryptoJS实现 ,如何获取clientKey2,这只会给出第一个结果。谢谢!
> 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中获得第二个结果,谢谢!
答案 0 :(得分:2)
要获得所需的clientKey2
,您需要将saltedPassword
字符串的十六进制数字编码为字节。一种方法可以在Python 2& Python 3将使用binascii.unhexlify
。
您的HmacSHA256
功能有点奇怪。它不会在Python 3上工作,因为bytes
对象没有.encode
方法。在Python 2中,bytes
只是str
的同义词。
无论如何,这里有一些适用于Python 2和DSP的代码。 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&amp; Python 3。
顺便说一句,在Python 3中执行此任务会更简单,它可以清楚地区分文本和字节字符串。此外,Python 3hashlib
模块具有pbkdf2
function。