如何为R中的对象创建伪造的二进制文件以获取其md5哈希?

时间:2019-03-17 12:27:34

标签: r

假设我要处理图像文件,然后使用其md5哈希作为文件名将其存储在磁盘上。天真的方法将包括以下步骤:

  1. 以任意名称存储处理后的图像;
  2. 使用file(file_name, "rb")创建到R中已处理图像文件的连接;
  3. openssl::md5()之类的函数应用于连接以获取md5哈希值;
  4. 使用md5哈希重命名文件。

但是,这似乎效率低下,因为第二步和第三步需要额外的磁盘IO。

我想知道是否存在一种在内存中生成伪造文件的方法,以便可以直接应用openssl::md5()来获得相同的md5总和,而不必先将文件存储在磁盘上。

这可能吗?如果是这样,该怎么做?

1 个答案:

答案 0 :(得分:0)

Cross posting my reddit answer:

The hint is the the help page to openssl::md5, which states that the input object can be a raw vector. So:

msg <- "The quick brown fox"
openssl::md5(charToRaw(msg))

md5 a2:00:4f:37:73:0b:94:45:67:0a:73:8f:a0:fc:9e:e5

compare to:

writeBin(charToRaw("The quick brown fox"), 'tmp.dat', useBytes=TRUE)
system('md5 tmp.dat')

MD5 (tmp.dat) = a2004f37730b9445670a738fa0fc9ee5

Gives the same output.