python - CryptoJS HmacSHA256 加密结果与Python不同

标签 python hmac cryptojs

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中获取第二个结果,谢谢!

最佳答案

要获得所需的 clientKey2,您需要将 saltedPassword 字符串的十六进制数字编码为字节。在 Python 2 和 Python 3 上都有效的一种方法是使用 binascii.unhexlify .

你的HmacSHA256函数有点奇怪。它不适用于 Python 3,因为 bytes 对象没有 .encode 方法。在 Python 2 中,bytes 只是 str 的同义词。

无论如何,这里有一些适用于 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 中执行此任务会更简单,它清楚地区分了文本和字节字符串。此外,Python 3 hashlib 模块有一个 pbkdf2 function .

关于python - CryptoJS HmacSHA256 加密结果与Python不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307282/

相关文章:

python Mechanize 代码以获取网页截图 - 但表单提交不工作

security - 使用 HMAC-SHA1 进行 API 身份验证 - 如何安全地存储客户端密码?

encryption - Rust 中的 HMAC、RS 和 Base64

security - REST 的 HMAC 身份验证

javascript - 添加 header 来获取,解决cors,运行cryptojs客户端

javascript - NodeJs Crypto - MD5 哈希不正确

python - python 中的直接列表分配 - 不插入

python - 使用凸壳坐标提取字符 - opencv - python

python - 保留BFS搜索的路径

node.js - 在实际调用我的passwordMatch函数之前,Passport 无法通过 "Wrong password"进行身份验证