6

我有一个大而“唯一”的整数(实际上是一个 SHA1 哈希)。

注意:虽然我在这里谈论的是 SHA1 哈希,但这不是密码学/安全问题!我不是要破坏 SHA1。如果有帮助的话,想象一个随机的 160 位整数而不是 SHA1。

我想(除了玩得开心)找到一种算法,将 SHA1 哈希映射到计算机生成的(伪)英文短语。映射应该是双向的(即,知道算法,必须能够从该短语计算原始 SHA1 哈希。)

这句话不必说得通。我什至会接受一整段废话。(虽然一个段落的质量——英语性——可能应该比一个短语更好。)

更好的算法会产生更短、更自然、更独特的短语。

一个变体:如果我只能使用哈希的一部分,那也没关系。说,前六个十六进制数字很好。

生成的短语的可能用法:Git 提交 ID 的人类可读版本,用作给定程序版本的座右铭,该程序版本是从该提交构建的。(正如我所说,这是“为了好玩”。我并不是说这非常实用——或者比 SHA1 本身更具可读性。)

可能的方法:在过去,我尝试建立一个概率表(单词),并根据我从 SHA 读取的位,将短语生成为马尔可夫链,为生成器播种(从概率树中挑选分支)。这不是很成功,产生的短语太长而且丑陋。我不确定这是一个错误,还是算法中的一般缺陷,因为我必须尽早放弃它。

现在我正在考虑再次尝试解决这个问题。关于如何解决这个问题的任何建议?你认为马尔可夫链方法可以在这里工作吗?还有什么?

4

4 回答 4

3

一个非常简单的方法是:分别列出 1024 个名词、1024 个动词和 1024 个形容词。然后,您的短语可以是以下形式的句子

noun[bits_01-10] verb[bits11-20] adjective[bits21-30] verb[bits31-40],
noun[bits_41-50] verb[bits51-60] adjective[bits61-70] verb[bits71-80],
noun[bits_81-90] verb[bits91-100] adjective[bits101-110] verb[bits111-120] and 
noun[bits_121-130] verb[bits131-140] adjective[bits141-150] verb[bits151-160].

通过更多的语言思考,您可能可以构建稍微复杂一点的广告,因此看起来不会那么重复的句子(例如,单数/复数有点,不同时态的两个,......)。较长的单词列表会占用更多的位,但我猜你会很快找到相当奇特的单词。

于 2011-01-13T20:23:26.927 回答
1

我们会,让我们看看... 英语大约有 1,000,000 个单词。每个字大约 20 位。SHA1 是 160 位,所以你需要 8 个字。从理论上讲,您所要做的就是取牛津英语词典中的第 n 个单词,其中 n 是一次 20 位的一组。

现在,为了让它更自然,您可以尝试使用一些简单的算法根据它们的类型(名词、动词...)在单词之间添加“in/at/on/and/the...”。(当然,您应该从基本词典中删除所有这些单词)。

该算法是可逆的:只需删除您添加的所有单词,并将每个单词转换为它的 20 位索引。

另外,尝试谷歌“侮辱生成器”。其中一些生成器非常好。不过,我不确定组合的数量。

您可以在 CD-ROM 上购买超过 500,000 个单词(19 位)的牛津英语词典。但是,我不确定提取单词及其类型是否容易。我不确定这是否合法,但我认为您不能对字典条目申请专利...

于 2011-01-13T18:49:34.943 回答
1

这是一个老问题,但是一个 JavaScript(节点/前端)库,​​也解决了这个问题。它将马尔可夫诗歌与霍夫曼编码相结合,因此给定相同的字典(即相同版本的库),转换诗歌↔︎数字将是双向的。

例如,从节点命令行:

> var Poet = require('entropoetry'); var p = new Poet();
> p.stringify(Buffer.from('deadbeef', 'hex'))
'old trick of loving you\nif you but'
> console.log(p.parse(`old trick of loving you
... if you but`))
<Buffer de ad be ef>

随着技术的进步,2011 年看似“仅供娱乐”的想法在 2017 年有了一些实际用途:记忆加密货币私钥(大脑钱包)、Dat/IPFS 链接等。

于 2017-12-31T01:47:40.163 回答
0

哈希函数意味着不可能(在合理的范围内)从哈希中获取数据,除非它被破坏(不安全)。

问题应该是关于打破SHA-1哈希算法的问题 - 看看谷歌,它并没有那么坏。所以不,你不能从 SHA-1 哈希码创建英文短语,如果可以的话,请写一篇关于它的大论文,其中很多都是无用的,这将是一个突破 :-)

编辑:如果只有部分哈希就足够了,我建议只是蛮力(+简单的哈希映射<->短语,可能在文件或数据库中),打破哈希算法是非常“强汤”(困难的问题)。

Edit2:大家在提问时要更加具体,这不是我的错……我不会删除它,以免吓跑周围的任何其他加密货币人士:-)

于 2011-01-13T18:44:48.127 回答