首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python的hashlib.sha256(x).hexdigest()是否等同于Rs digest(x,algo="sha256")

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

Stack Overflow用户
提问于 2015-07-03 22:43:12
回答 1查看 11K关注 0票数 5

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

代码语言:javascript
复制
hashlib.sha256(x).hexdigest()

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

根据这种解释,我将使用以下R函数:

代码语言:javascript
复制
digest(x, algo="sha256", raw=FALSE)

基于我有限的R知识和我在网上读到的Python的hashlib函数,这两个函数应该会产生相同的结果,但事实并非如此。3.

是我遗漏了什么,还是我用错了R函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-03 22:50:55

是的,Python和R示例代码都返回传入数据的SHA256散列摘要的十六进制表示。

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

代码语言:javascript
复制
> digest('', algo="sha256", serialize=FALSE)
[1] "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
> digest('hello world', algo="sha256", serialize=FALSE)
[1] "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"

它们与Python中的等价物相匹配:

代码语言:javascript
复制
>>> import hashlib
>>> hashlib.sha256('').hexdigest()
'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
>>> hashlib.sha256('hello world').hexdigest()
'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'

如果您的散列在R和Python之间仍然不同,那么您的数据是不同的。这可能是一个微妙的变化,比如在行尾加上一个换行符,或者在开头加上一个字节顺序标记。

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

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31209425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档