【问题标题】:Difference of MD5 Hash in R-Librarys - MD5 for serialized objectsR-Librarys 中 MD5 哈希的区别 - 用于序列化对象的 MD5
【发布时间】:2017-01-26 13:49:27
【问题描述】:

我想计算一个 R 对象的 MD5 哈希值。这通常是通过序列化对象完成的。我知道两个可以计算 MD5 哈希的不同 R 库 - 摘要库和 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"

为什么这些哈希值不同?

【问题讨论】:

  • 你试过阅读源代码吗?
  • 是的,我查看了以相同方式序列化输入的摘要函数的代码。

标签: r serialization openssl md5 digest


【解决方案1】:

简答

如果对象被序列化,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之前会跳过这些位,所以结果会一致。

【讨论】:

  • 非常感谢您提供的详细信息!
猜你喜欢
  • 2012-08-17
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 2019-04-24
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多