我想为一个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"为什么这些哈希值不同?
发布于 2017-01-26 15:21:59
简短回答
如果对象被序列化,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之前跳过这些位,因此结果将是一致的。
https://stackoverflow.com/questions/41874958
复制相似问题