【问题标题】:How to reproduce an SHA256-based HMAC from R in Python 3如何在 Python 3 中从 R 重现基于 SHA256 的 HMAC
【发布时间】:2020-02-11 12:58:39
【问题描述】:

我正在尝试从 Python 中的 R 代码重现盐渍 sha256 输出:

library(openssl)
res = sha256("test@gmail.com", key = "111")  
res
# [1] "172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031"
import hashlib, binascii
dk = hashlib.pbkdf2_hmac(='sha256', b'test@gmail.com', b'111', 0)
binascii.hexlify(dk)
# b'494c86307ffb9e9e31c4ec8782af6498e91272c011a316c242d9164d765be257'

如何在 python match R 中进行输出?

【问题讨论】:

标签: python r sha256 hmac salt


【解决方案1】:

我无法完全重现您的问题。以下键匹配

在 R 中:

library(openssl)
sha256("test@gmail.com")
#[1] "87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674"

在 Python3 中:

import hashlib
print(hashlib.sha256(b"test@gmail.com").hexdigest())
#87924606b4131a8aceeeae8868531fbb9712aaa07a5d3a756b26ce0f5d6ca674

根据您的评论进行更新

首先要注意的是,在 R 中 sha256 带有非 NULL key 参数将计算 hash-based message authentication code (HMAC)。来自?sha256

所有散列函数要么计算'key ==的散列摘要 NULL' 或 HMAC(散列消息验证码)当‘key’是 不是‘NULL’。

因此,如果您想使用密钥,则需要将 R 中生成的 HMAC 与 Python 中基于 SHA2556 的 HMAC 进行比较。

在 R 中:

library(openssl)
sha256("test@gmail.com", key = "111")
#[1] "172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031"

在 Python 3 中:

import hmac
import hashlib
print(hmac.new(b"111", b"test@gmail.com", hashlib.sha256).hexdigest())
#172f052058445afd9fe3afce05bfec573b5bb4c659bfd4cfc69a59d1597a0031

【讨论】:

  • @Bulat 我已经进行了编辑,请看一下。我还编辑了你的标题,因为你实际上不是在问如何重现 SHA256,而是基于 SHA256 的 HMAC。
猜你喜欢
  • 2017-02-07
  • 2020-10-19
  • 2020-08-29
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-25
  • 2020-10-18
  • 2012-07-10
相关资源
最近更新 更多