首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R sha1sum文件

R sha1sum文件
EN

Stack Overflow用户
提问于 2021-02-13 21:15:12
回答 1查看 398关注 0票数 0

我想用R做一个文件的sha1和。

我的系统是运行RStudio 1.4的Windows 10。

这样做是可行的:

代码语言:javascript
复制
md5sum <- md5sum(file)

这并不是:

代码语言:javascript
复制
sha1sum <- sha1sum(file)

“找不到函数sha1sum”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-13 21:52:08

openssl::sha1digest::sha1的比较

代码语言:javascript
复制
writeLines("foo", "quux.txt")
system2("sha1sum", c("quux.txt"), stdout = TRUE)
# [1] "855426068ee8939df6bce2c2c4b1e7346532a133 *quux.txt"
as.character(openssl::sha1(file("quux.txt")))
# [1] "855426068ee8939df6bce2c2c4b1e7346532a133"
digest::sha1("quux.txt")
# [1] "ad1a86aea4360a7d5c5fb0265f00438f6d7664a2"

这就开始显示出问题所在,一个人和其他人意见不一致。查看正在发生的事情的一种方法是更改文件的内容,但保持文件名不变:

代码语言:javascript
复制
writeLines("foofoofoo", "quux.txt")
as.character(openssl::sha1(file("quux.txt")))
# [1] "47673505b61b548b176d3d0449d7f6a4f3e9e09e"
system2("sha1sum", c("quux.txt"), stdout = TRUE)
# [1] "47673505b61b548b176d3d0449d7f6a4f3e9e09e *quux.txt"
digest::sha1("quux.txt")
# [1] "ad1a86aea4360a7d5c5fb0265f00438f6d7664a2"

前两个更改(这是预期的),并保持不变,但第三个来自digest::sha1没有改变,尽管内容已经改变。虽然理论上可能有两个内容不同的文件可以生成相同的SHA1校验和,但事实并非如此。

顺便说一句:根据您的使用情况,SHA1不再推荐用于安全散列,而更倾向于使用SHA256或SHA512或其他更强的哈希函数。

另一个BTW:别忘了file(.)openssl::sha1中的使用,否则你就犯了同样的错误。

代码语言:javascript
复制
writeLines("foo", "quux.txt")
openssl::sha1("quux.txt")
# [1] "08a72b849478907ae9de2ff46ba53ce6aeeba360"
as.character(openssl::sha1(file("quux.txt")))
# [1] "855426068ee8939df6bce2c2c4b1e7346532a133"

writeLines("foofoofoo", "quux.txt")
openssl::sha1("quux.txt")
# [1] "08a72b849478907ae9de2ff46ba53ce6aeeba360"
### has not changed!

as.character(openssl::sha1(file("quux.txt")))
# [1] "47673505b61b548b176d3d0449d7f6a4f3e9e09e"

在这一点上,帮助医生可能不是很清楚。来自?openssl::sha1

代码语言:javascript
复制
       x: character vector, raw vector or connection object.

它对字符串或文件的操作是多态的.而且,尽可能方便,它也可以引导(经常!)对正在发生的事情的误解。如果您想一想,函数如何知道您要寻找的是一个文件?如果它使用file.exists检查它是否存在,那么它将给出文件内容的校验和;如果不是,则给出字符串的校验和。如果您运行该代码并期望它检查一个文件,并且该文件不存在,我希望会有一个错误,但是返回您认为是一个文件的字符串的校验和,函数认为是一个字符串.打破用例中的许多假设。(我建议他们使用明确的参数,如text=file=con=。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66190006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档