将加密函数从Javascript转换为Python



我正在尝试将此代码从Javascript转换为Python3:

import crypto from 'crypto';
const secretKey = 'NgTriSCalcUltAbLoGResOnOuSeAKeSTraLryOuR'
function verifySignature(rawBody) {
const calculatedSignature = crypto
.createHmac('sha256', secretKey)
.update(rawBody, 'utf8')
.digest('base64');
return calculatedSignature;
}
console.log(verifySignature('a'));
通过这段代码,我得到了这样的输出:vC8XBte0duRLElGZ4jCsplsbXnVTwBW4BJsUV1qgZbo=

所以我试图使用以下代码将相同的函数转换为Python:

import hmac
import hashlib
message = "a"
key= "NgTriSCalcUltAbLoGResOnOuSeAKeSTraLryOuR"
hmac1 = hmac.new(key=key.encode(), msg=message.encode(), digestmod=hashlib.sha256)
message_digest1 = hmac1.hexdigest()
print(message_digest1)

但是我得到这个错误:AttributeError: 'hash'对象没有属性'digestrongize'

有人能告诉我我错过了什么在Python中实现相同的输出?

谢谢你!:)

您没有从返回语句的digest()中获得base64。在你的javascript代码中,它也是用UTF-8编码的,应该在下面指定。python代码中也没有提供该键。

我刚刚测试的代码片段应该会生成与javascript代码相同的结果:

def newhashab(msg, key):
digest = hmac.new(key.encode('UTF-8'), msg.encode('UTF-8'), hashlib.sha256)
return base64.b64encode(digest.digest()).decode('UTF-8')
print(newhashab("a", 'NgTriSCalcUltAbLoGResOnOuSeAKeSTraLryOuR'))

它应该返回:

'vC8XBte0duRLElGZ4jCsplsbXnVTwBW4BJsUV1qgZbo='

最新更新