我有一个大而“唯一”的整数(实际上是SHA1哈希)。
注意:我在这里谈论SHA1哈希时,这是不加密/安全问题!我不试图打破SHA1。想象一下随机的160位整数而不是SHA1,如果这会有所帮助。
我希望(除了获得乐趣之外别无其他原因)找到一种算法将SHA1哈希映射到计算机生成的(伪)英语短语。映射应该是双向的(即,知道算法,必须能够从该短语计算原始SHA1哈希值。)
这句话没有意义。我甚至会满足于整段废话。 (虽然一段的质量 - 英语 - 应该比单纯的短语更好。)
更好的算法会产生更短,更自然,更独特的短语。
一种变化:如果我只能使用一部分哈希值,那就没关系了。比如,前六个十六进制数字就好了。
生成的短语的可能用法:Git提交ID的人类可读版本,用作给定程序版本的座右铭,该版本是根据该提交构建的。 (正如我所说,这是“为了好玩”。我并不认为这是非常实用的 - 或者比SHA1本身更具可读性。)
可能的方法:在过去,我试图建立一个概率表(单词),并根据我读到的位生成短语作为马尔可夫链,播种生成器(从概率树中挑选分支)来自SHA。这不是很成功,由此产生的短语太长而且难看。我不确定这是一个错误,还是算法中的一般缺陷,因为我不得不尽早放弃它。
现在我正在考虑再次尝试解决问题。关于如何处理这个问题的任何建议? 你认为马尔可夫连锁方法可以在这里运作吗?还有别的吗?
答案 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:在提问时更有针对性,而不是我的错......我不会删除它,以免吓跑任何其他加密人: - )