我有一对电子邮件地址和哈希,你能告诉我创建它们是用什么吗?
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.com
和abcdefgh2@example.com
的编码(在第9个字符处不同)具有相同的第一块,则它(可能)是具有常数IV的CBC
你需要弄清楚的另一件事是填充模式。有一些常见的。除了欧洲央行之外,这是一个很难理解的黑匣子。
有一些在线工具,还有一些开源项目。例如:
https://code.google.com/archive/p/hash-identifier/
http://www.insidepro.com/