如何从特定的字符串中获取特定的哈希值?

How to get a specific hash value from a specific string?

我正在 https://github.com/lightning/bolts/blob/master/11-payment-encoding.md#now-send-24-for-an-entire-list-of-things-hashed 查看一些关于 Lightning 发票创建的文档。

他们说

的 SHA256 散列
One piece of chocolate cake, one icecream cone, one pickle, one slice of swiss cheese, one slice of salami, one lollypop, one piece of cherry pie, one sausage, one cupcake, and one slice of watermelon

8yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqs

当我使用 LND 创建发票时,returns 发票在解码时显示相同的值,但是当我尝试使用 JavaScript 或在线散列源字符串时工具,我从来没有得到过这样的字符串。

这是我用 JavaScript 得到的:

createHash('sha256').update(str).digest('hex')

3925b6f67e2c340036ed12093dd44e0368df1b6ea26c53dbe4811f58fd5db8c1

在线工具也没有给出我期望的结果。

所以,我想在幕后发生了一些额外的 encode/decode 过程。

如何将 One piece of chocolate cake, one icecream cone, one pickle, one slice of swiss cheese, one slice of salami, one lollypop, one piece of cherry pie, one sausage, one cupcake, and one slice of watermelon 变成 8yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqs

我使用 bech32-converting 库来检查这个:

conv = require('bech32-converting')
conv("").toBech32("3925b6f67e2c340036ed12093dd44e0368df1b6ea26c53dbe4811f58fd5db8c1")

> '18yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqspe7lh6'

其中包含结果...请注意,前面有一个 1pe7lh6 :

第一个字符 (1) 是 Bech32 separator,它始终是 1(例如,使用上面的 conv("bc") 会在前面添加 bc

最后六个字符 (pe7lh6) 是 Bech32 checksum