R库中MD5哈希的区别-序列化对象的MD5

用户名

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

为什么这些哈希值不同?

978

简短答案

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

长答案

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

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章