以可逆方式从大整数生成伪自然短语

时间:2011-01-13 18:10:22

标签: sha bignum markov-chains

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

注意:我在这里谈论SHA1哈希时,这是加密/安全问题!我试图打破SHA1。想象一下随机的160位整数而不是SHA1,如果这会有所帮助。

我希望(除了获得乐趣之外别无其他原因)找到一种算法将SHA1哈希映射到计算机生成的(伪)英语短语。映射应该是双向的(即,知道算法,必须能够从该短语计算原始SHA1哈希值。)

这句话没有意义。我甚至会满足于整段废话。 (虽然一段的质量 - 英语 - 应该比单纯的短语更好。)

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

一种变化:如果我只能使用一部分哈希值,那就没关系了。比如,前六个十六进制数字就好了。

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

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

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

4 个答案:

答案 0 :(得分: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].

有了更多的语言思想,你可以构建稍微复杂一点的广告,因此不是那么重复的句子(比如说,有点用于单数/复数,有点两用于不同的时态,......)。较长的单词列表会占用更多的位,但我的猜测是你会非常快地达到相当奇特的单词。

答案 1 :(得分:1)

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

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

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

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

You can buy牛津英语词典CD-ROM,超过500,000字(19位)。但是,我不确定提取单词及其类型是否容易。我不确定它是否合法,但我认为你不能就字典条目申请专利......

答案 2 :(得分:1)

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

示例,来自Node命令行:

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

technology marches on一样,2011年看起来像“有趣”的想法在2017年有一些实际用途:记忆加密货币私钥(大脑钱包),数据/ IPFS链接等。

答案 3 :(得分:0)

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

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

编辑:如果只有部分哈希足够,我建议只是暴力(+简单的哈希地图&lt; - &gt;短语,可能在文件或数据库中),破解哈希算法非常“强烈的汤”(难题)。

编辑2:在提问时更有针对性,而不是我的错......我不会删除它,以免吓跑任何其他加密人: - )