是的,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在使用它们的交互模式时都将字符串值作为表示。