我正在尝试使用以下字符串加密SHA-1:
commit 218\0tree 64a7513fad0b86d34b6feedbf9c2e99135819861 parent 233634213baf3f40236233f28c6646f20786a80a author CTF user <me@example.com> 1390678027 +0000 committer CTF user <me@example.com> 1390678027 +0000 Give me a Gitcoin 200
这是一个git hash-object
输入,带有标题以及提交消息。我得到的结果从一种方法到另一种方法非常不同。
使用git hash-object,我得到bed6b1001619ad84548d05db65a75ac80bf79f31
。
使用Ruby的digest/sha1
,我得到e729e36abf0fa4da392b8f2acc1561ec5d298af9
。
使用http://www.sha1-online.com,我得到d543ddbfb7607464f5f964b9a3536eccedd1e1a4
。
这非常令人困惑。它是哪一个,为什么我无法模仿git-hash-object
的功能?我阅读http://git-scm.com/book/en/Git-Internals-Git-Objects并按照那里的说明进行操作,但我似乎无法获得正确的哈希摘要。
这是我的红宝石片段:
Digest::SHA1.hexdigest "commit #{body.length}\0#{body}"
在git中是否有办法查看哈希对象标头或用于散列出SHA-1的字符串?我上面的方法出了什么问题?
答案 0 :(得分:3)
这是你怎么做的(确保有换行符!)
require 'digest/sha1'
content = "tree #{tree}
parent #{parent}
author CTF user <me@example.com> #{timestamp} +0000
committer CTF user <me@example.com> #{timestamp} +0000
Give me a Gitcoin
1
"
Digest::SHA1.hexdigest "commit #{content.length}\0#{content}"