- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不是 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/
判断这2个相似的Uris实际上相同的标准方法是什么? var a = new Uri("http://sample.com/sample/"); var b = new Uri("http://sam
这个问题在这里已经有了答案: Why does "true" == true show false in JavaScript? (5 个答案) 关闭 5 年前。 可能我很困惑,但我无法理解这个愚蠢
我是一名优秀的程序员,十分优秀!