将加密函数从Javascript转换为Python

tf7tbtn2  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(164)

我正在尝试将此代码从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)

但我得到这个错误:* * 属性错误:"hash"对象没有属性"digest_size"**
有人能告诉我,在Python中实现相同的输出还缺少什么吗?
谢谢你!:)

luaexgnf

luaexgnf1#

你没有从return语句的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='

相关问题