【问题标题】:Convert encryption function from Javascript to Python将加密函数从 Javascript 转换为 Python
【发布时间】:2023-01-10 11:20:27
【问题描述】:

我正在尝试将此代码从 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' 对象没有属性 'digest_size'

有人能告诉我在 Python 中实现相同输出我缺少什么吗?

谢谢! :)

【问题讨论】:

  • 带有密钥的 HMAC 与没有密钥的原始 SHA256 散列不同。 base64 编码的摘要与作为字节的原始摘要不同。

标签: javascript python python-3.x cryptojs


【解决方案1】:

您没有从 return 语句的 digest() 中获取 base64。在您的 javascript 代码中,它也以 UTF-8 编码,应在下面指定。您的 python 代码中也未提供密钥。

我刚刚测试的这段代码 sn-p 应该会生成与您的 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='

【讨论】:

  • 非常感谢沙拉!与其他用户不同,您帮助了我并进行了解释。你没有无缘无故批评我或给我差评。感谢您脚踏实地。
  • 很高兴能帮助你 :)
猜你喜欢
  • 2015-09-23
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多