是否可以判断是哪个哈希算法生成了这些字符串



我有一对电子邮件地址和哈希,你能告诉我创建它们是用什么吗?

aaaaaaa@aaaaa.com
BeRs114JrR0sBpueyEmnOWZfnLuigYTA

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

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

首先,即使你对密码学一无所知,显而易见的是:百分号是URL编码;提供的解码

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

而这反过来就是base64。编码的长度与原始字符串的长度为

plaintext  encoding
17         24
43         48
10         16

更多的样本会给人更多的信心,但很明显,编码将明文填充为8字节的倍数。这意味着一个分组密码(它不可能是哈希,因为哈希是固定大小的)。事实上的标准块算法是AES,它使用16字节块;24不是16的倍数,所以这是不可能的。块大小为8(适合数据)的最常见的块算法是DES;3DES或河豚或更罕见的东西也是可能的,但DES是我花钱买的。

既然这是一个密码,肯定有一把钥匙在某处。它可能在配置文件中,也可能在源代码中进行硬编码。如果您所拥有的只是二进制文件,那么您应该能够在调试器的帮助下找到它。使用DES,你可以通过蛮力找到密钥(因为密钥只有56位,在亚马逊上租用一点CPU时间是可行的),但在程序中找到它会更容易。

如果你想重现算法,那么你还需要弄清楚操作模式。这里的一条线索是,编码永远不会比明文长超过7个字节,因此没有初始化向量的空间。如果制作该软件的开发人员做得很糟糕,他们可能会使用ECB。如果他们做了一个稍微不那么可怕的工作,他们可能会使用CBC或(不太可能)其他具有常数IV的模式。您可以通过测试一些模式来完善分析:

  • 如果abcdefghabcdefgh@example.com的编码(从两个相同的8字节块开始)从两个完全相同的8比特块开始,则为ECB
  • 如果abcdefgh1@example.comabcdefgh2@example.com的编码(在第9个字符处不同)具有相同的第一块,则它(可能)是具有常数IV的CBC

你需要弄清楚的另一件事是填充模式。有一些常见的。除了欧洲央行之外,这是一个很难理解的黑匣子。

有一些在线工具,还有一些开源项目。例如:

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

http://www.insidepro.com/

相关内容

  • 没有找到相关文章

最新更新