无论谁执行哈希计算以及在何处执行MD5哈希都应返回相同的值。
但是,在同一文件上使用三种不同的方法,我们会看到三种不同的答案(!?)。
这是文件。
根据Amazon Web Services的MD5哈希为:
library(dplyr)
"https://collidr-api.s3-ap-southeast-2.amazonaws.com/pfd.RDS" %>% curlGetHeaders %>% .[6] %>% trimws %>%
strsplit(., "ETag: ") %>% .[[1]] %>% .[2] %>%
{ substr(., 2, nchar(.)) } %>% { substr(., 1, nchar(.) - 1)}
# "a921f713fbd730a51814fb6602048c16"
使用该digest
库的MD5哈希为
library(digest)
digest("Downloads/pfd.RDS", algo=c("md5"))
# "2b049aba0269e46d35780c3e7d29a916"
使用openssl
库的MD5哈希为
library(openssl)
md5("Downloads/pfd.RDS")
# "8ceabf9bdd146ed12ba89533cd593d12"
我无法解释这一点。我希望这三个值都相同,因为它们都对同一文件应用了相同的算法(MD5),但三个值都不相同。
无论使用哪种方法生成文件的MD5哈希值,哈希值为何都不相同,最重要的是,如何计算R中的哈希值使其与AWS提供的MD5哈希值匹配(即a921f713fbd730a51814fb6602048c16
)?
在mac终端中md5 Downloads/pfd.RDS
返回a921f713fbd730a51814fb6602048c16
(与AWS值一致)。尚不清楚原因digest::digest()
和openssl::md5()
价值观是否不同。
如果要在该路径上散列文件的内容,则需要告诉每个函数。尝试
digest("Downloads/pfd.RDS", file=TRUE, algo="md5")
和
md5(file("Downloads/pfd.RDS", open="rb"))
否则,您将对路径名本身进行哈希处理。
在简单的情况下,它们返回相同的值
cat("hello", file="hello.txt")
digest("hello.txt", file=TRUE, algo="md5")
# [1] "5d41402abc4b2a76b9719d911017c592"
md5(file("hello.txt", open="rb"))
# md5 5d:41:40:2a:bc:4b:2a:76:b9:71:9d:91:10:17:c5:92
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句