r - R-Librarys 中 MD5 哈希的差异 - 序列化对象的 MD5

标签 r serialization openssl md5 digest

我想计算 R 对象的 MD5 哈希值。这通常是通过序列化对象来完成的。我知道有两个不同的 R 库可以计算 MD5 哈希值 - 摘要库和 openssl 库。但是这两个返回不同的哈希值。这是 openssl 库之前的示例:

test <- 1:100

library(openssl )
md5(serialize(test, connection = NULL))
# returns: md5 23:a8:b3:40:9e:08:a0:3d:30:6e:3d:3d:cb:fe:21:57 

现在是摘要库的示例:

library(digest)
digest(test,"md5",serialize = T)
# returns: [1] "83777773fa047247723ad5a255963144"

为什么这些哈希值不同?

最佳答案

简短回答

如果对象被序列化,

digest 会跳过一些前导位。

例如:

> .t <- serialize(test, connection = NULL)
> md5(.t[seq(15, length(.t))])
md5 83:77:77:73:fa:04:72:47:72:3a:d5:a2:55:96:31:44

长答案

R版本不同,serialize(1:100, connection = NULL)的结果也不同。

根据base::serialize的源码,R在序列化过程中写入一些代表R版本的整数。

digest::digest 在计算 md5sum 之前会跳过这些位,因此结果将是一致的。

关于r - R-Librarys 中 MD5 哈希的差异 - 序列化对象的 MD5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41874958/

相关文章:

c - 具有全双工套接字通信的 SSL 重新协商

c# - 使用 NewtonSoft Json.NET 从基类型集合序列化派生类型的属性

java - 序列化:将对象作为 URL 参数传递并提取值

javascript - Ajax 数据未到达 Controller ?为什么?

python - 如何使用 python 和 openssl 验证 webhook 签名

ssl - 如何在命令行上检查我的 SSL 证书是 SHA1 还是 SHA2

r - 在数字数据帧中添加字符串并连接两个字符串数据帧

r - 按组扫描第二个矩阵

r - 是否可以在.Rd中使用嵌套项目?

r - 有没有办法在 R 中返回操作系统编号格式