gpt4 book ai didi

python - Python 的 hashlib.sha256(x).hexdigest() 是否等同于 Rs digest(x,algo ="sha256")

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:57 25 4
gpt4 key购买 nike

我不是 python 程序员,但我正在尝试将一些 Python 代码转换为 R。我遇到问题的 python 代码是:

hashlib.sha256(x).hexdigest()

我对这段代码的解释是,该函数将使用 sha256 算法计算 x 的哈希值,并以十六进制返回值。

鉴于这种解释,我正在使用以下 R 函数:

digest(x, algo="sha256", raw=FALSE)

基于我对 R 的有限知识以及我在网上阅读的关于 Python 的 hashlib 函数的内容,这两个函数应该产生相同的结果,但事实并非如此。

我是不是遗漏了什么或者我使用了错误的 R 函数。

最佳答案

是的,Python 和 R 示例代码都会为传入的数据返回 SHA256 哈希摘要的十六进制表示形式。

您确实需要关闭 R 中的序列化,否则 digest() 包首先创建字符串的序列化,而不是仅计算字符数据的散列;将 serialize 设置为 FALSE:

> digest('', algo="sha256", serialize=FALSE)
[1] "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
> digest('hello world', algo="sha256", serialize=FALSE)
[1] "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"

这些匹配它们的 Python 等价物:

>>> import hashlib
>>> hashlib.sha256('').hexdigest()
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
>>> hashlib.sha256('hello world').hexdigest()
'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'

如果你的哈希值在 R 和 Python 之间仍然不同,那么你的数据是不同的。这可能是一个微妙的行末尾的换行符,或者开头的字节顺序标记。

在 Python 中,检查 print(repr(x)) 的输出以将数据表示为 Python 字符串文字;这将不可打印的字符显示为转义序列。我确信 R 有类似的调试工具。 R 和 Python 在使用它们的交互模式时都会回显字符串值作为表示。

关于python - Python 的 hashlib.sha256(x).hexdigest() 是否等同于 Rs digest(x,algo ="sha256"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com