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

时间:2017-01-26 13:49:27

标签: r serialization openssl md5 digest

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

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

现在是摘要库的示例:

self.layer.backgroundColor

为什么这些哈希值不同?

1 个答案:

答案 0 :(得分:0)

简短回答

如果对象被序列化,

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之前跳过这些位,因此结果将是一致的。