SHA-1一个字符串(git-hash-object字符串)

时间:2014-01-25 19:35:22

标签: ruby git sha1 sha digest

我正在尝试使用以下字符串加密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的字符串?我上面的方法出了什么问题?

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}"