是否有可能告诉哪些哈希算法生成了这些字符串?

时间:2016-03-31 20:21:35

标签: encryption hash

我有成对的电子邮件地址和哈希值,你能说出用来创建它们的内容吗?

aaaaaaa@aaaaa.com
BeRs114JrR0sBpueyEmnOWZfnLuigYTA

aaaaaaaaaaaaa.bbbbbbbbbbbb@cccccccccccc.com
4KoujQHr3N2wHWBLQBy%2b26t8GgVRTqSEmKduST9BqPYV6wBZF4IfebJS%2fxYVvIvR

r.r@a.com
819kwGAcTsMw3DndEVzu%2fA%3d%3d

2 个答案:

答案 0 :(得分:2)

首先,即使你对密码学一无所知,显而易见:百分号是URL encoding;解码给出

BeRs114JrR0sBpueyEmnOWZfnLuigYTA
4KoujQHr3N2wHWBLQBy+26t8GgVRTqSEmKduST9BqPYV6wBZF4IfebJS/xYVvIvR
819kwGAcTsMw3DndEVzu/A==

而这又是base64。编码的长度与原始字符串的长度相同

plaintext  encoding
17         24
43         48
10         16

更多的样本会更有信心,但相当清楚的是编码将明文填充到8个字节的倍数。这表示block cipher(它不能是hash,因为哈希是固定大小的)。事实上的标准块算法是使用16字节块的AES; 24不是16的倍数以便出局。块大小为8(适合数据)的最常见块算法是DES; 3DES或blowfish甚至更罕见的东西也是可能的,但DES就是我的钱。

因为它是一个密码,所以某处必须有一个密钥。它可能位于配置文件中,也可能是源代码中的硬编码。如果只有二进制文件,您应该能够在调试器的帮助下找到它。使用DES,您可以通过暴力找到密钥(因为密钥只有56位,并且可以通过在Amazon上租用一点CPU时间来实现),但在程序中找到它会更容易。

如果您想重现算法,那么您还需要找出mode of operation。这里有一条线索是编码永远不会比明文长7个字节,因此initialization vector没有空间。如果制作该软件的开发人员做得很糟糕,他们可能会使用ECB。如果他们的工作稍微不那么糟糕,他们可能会使用CBC或(更不可能)使用常数IV的其他模式。如果他们再做一个稍微不那么糟糕的工作,那么IV可能来自账户的其他一些特征。您可以通过测试某些模式来优化分析:

  • 如果abcdefghabcdefgh@example.com的编码(从两个相同的8字节块开始)以两个相同的8字节块开头,那就是它的ECB。
  • 如果abcdefgh1@example.comabcdefgh2@example.com(第9个字符不同)的编码具有相同的第一个块,则它的CBC(可能)具有常数IV。

您需要弄清楚的另一件事是填充模式。有一个few common ones。除了欧洲央行之外,有点难以弄明白是黑盒子。

答案 1 :(得分:0)

网上有一些工具,还有一些开源项目。例如:

https://code.google.com/archive/p/hash-identifier/

http://www.insidepro.com/