首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CryptoJS HmacSHA256加密结果与HmacSHA256不同

CryptoJS HmacSHA256加密结果与HmacSHA256不同
EN

Stack Overflow用户
提问于 2017-11-15 12:21:08
回答 1查看 2K关注 0票数 2

CryptoJS加密的字符串可以在python中传递不同的参数,只能传递一个字符串?如何在python中实现第二个CryptoJS实现,如何获得clientKey2,这只会给出第一个result.Thanks!

代码语言:javascript
复制
> 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,

代码语言:javascript
复制
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中获得第二个结果,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-15 13:04:24

要获得所需的clientKey2,需要将saltedPassword字符串的十六进制数字编码为字节。在Python2和Python3上工作的一种方法是使用binascii.unhexlify

您的HmacSHA256函数有点奇怪。它不会在Python3上工作,因为bytes对象没有.encode方法。在Python2中,bytes只是str的同义词。

无论如何,这里有一些同时适用于Python 2和Python 3的代码。

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
857ef8988876a3bb6bcadb85ca257787074e73e830d7dc14c1f838ba46aef1f5
9a8574da9b276ee1162dcb92071df587f4513bc03060bda1e9b3897d46233416

Python 2&Python3上的输出是相同的。

顺便说一句,在Python 3中完成这一任务会更简单,因为它明确区分了文本字符串和字节字符串。而且,Python3 hashlib模块有一个 function

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47307282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档