我已将349,900
个单词从词典文件转换为md5哈希。示例如下:
74b87337454200d4d33f80c4663dc5e5
594f803b380a41396ed63dca39503542
0b4e7a0e5fe84ad35fb5f95b9ceeac79
5d793fc5b00a2348c3fb9ab59e5ca98a
3dbe00a167653a1aaee01d93e77e730e
ffc32e9606a34d09fca5d82e3448f71f
2fa9f0700f68f32d2d520302906e65ce
1c9b32ff1b53bd892b87578a11cbd333
26a10043bba821303408ebce568a2746
c3c32ff3481e9745e10defa7ce5b511e
我想训练一个神经网络,以使用诸如多层感知器之类的简单架构解密哈希。由于所有哈希值的长度均为32,因此我想输入的节点数为32,但是这里的问题是输出节点的数。由于输出是字典中的单词,因此没有特定的长度。它的长度可以不同。这就是为什么我对我应该拥有多少个输出节点感到困惑的原因。
如何编码数据,以便可以有特定数量的输出节点?
我在此链接中发现了一篇论文here,该论文实际上是使用神经网络解密哈希的。报纸说
神经网络的输入是要解码的加密文本。它以双极或二进制格式馈入神经网络。然后,它遍历隐藏层到达最终输出层,该输出层也采用双极性或二进制格式(如输入中所给)。然后将其转换回纯文本以进行进一步处理。
我将如何执行本文中所说的内容。我正在考虑限制要解密的字符数。最初,我只能将其限制为4
个字符(仅出于测试目的)。
我的输入节点将是32
节点,代表哈希的每个字符。每个输入节点将具有(each_hash_character / 256的ASCII值)。我的输出节点将有32个节点,它们也代表二进制格式。由于8位/ 8个节点代表一个字符,因此我的网络仅具有解密字符的能力,最多只能有4个字符,因为(32/8)=4。(如果需要,我可以增加它。)我打算使用33个节点。我的网络架构可行吗? 32 x 33 x 32
?如果没有,为什么?请引导我。
答案 0 :(得分:2)
您可以在矢量空间中将字典中的单词映射(例如,一袋单词,word2vec,..)。在那种情况下,单词以固定长度编码。输出层中神经元的数量将与该长度匹配。
答案 1 :(得分:1)
在另一个Stack Exchange论坛中,关于使用神经网络进行破解 SHA256散列的可能性的讨论很多:https://security.stackexchange.com/questions/135211/can-a-neural-network-crack-hashing-algorithms
可接受的答案是:
否。
神经网络是模式匹配器。他们是很好的模式 匹配器,但模式匹配器相同。不超过 他们打算模仿的生物大脑。更彻底,更全面 不倦,但并不复杂。
必须找到模式。必须有一个偏见 挑逗数据。但是密码哈希是明确的 精心设计以消除输出中的任何偏差。没有 一位比其他一位更有可能,没有一个输出更有可能 与任何给定的输入相关。如果这样的关联是可能的, 散列将被视为“散列”,新算法将采用 地方。
Flaws in hash functions have been found before,但永远不要借助 神经网络取而代之的是仔细地应用 某些数学原理。
以下答案也做了有趣的比较:
SHA256的输出空间为2 ^ 256,而输入空间为 本质上是无限的。供参考,自大爆炸以来的时间是 估计为50亿年,大约是1.577 x 10 ^ 27 纳秒,大约2 ^ 90 ns。所以假设每次训练 迭代需要1 ns,您需要2 ^ 166个年龄的宇宙 训练您的神经网络。