找到使用的加密或散列方法

问题描述

| 我试图找出客户端应用程序用来返回会话密钥的算法。 当我启动连接时,服务器首先发送一个唯一的会话密钥。然后,客户端必须使用加密或哈希密码进行响应,并将用户名用户名一起发送到服务器。 客户端和服务器之间的示例网络跟踪:(用户名:serv1ce /密码:test12) 从服务器<< 52 d7 1c 3f 9f 2c 05 c9收到的应用程序(一次会话密钥) 应用已发送到服务器>> 11 83 2d 7d ff 0c 51 8c 53 45 52 56 31 43 45 20 \“ 53 45 52 56 31 43 45 20 \”部分是明文形式的用户名,为字节值(serv1ce)。 有谁知道如何使用密码“ test12”和64位(8字节)会话密钥“ 52 d7 1c 3f 9f 2c 05 c9”创建了字节“ 11 83 2d 7d ff 0c 51 8c”?     

解决方法

        如果他们使用的是加密安全的哈希,那么原则上从输入和输出中就不能发现这一点。 实际上,它们返回的是8个字节,即64位,这表明它们正在使用MD5的某些变体。如果他们遵循典型的做法,则很可能以某种方式创建了一个字符串,其中包括用户名,密码,会话密钥和秘密哈希的某种组合,然后对其进行哈希处理。 (请注意,我说的是典型实践,而不是最佳实践。最佳实践是为此目的使用缓慢的东西来进行计算,例如bcrypt。)如果您找出魔术组合,则可以找到答案。 您有两种不错的方法。最简单的是蛮力搜索。如果您搜索“ 0”,您会发现大量工具,可将MD5计算卸载到视频卡上。这些是蛮力搜索的理想选择,并且可以让您快速尝试上述主题的惊人变体。 (这种攻击的可行性就是为什么人们应该对这类东西使用bcrypt。) 另一个是您拥有该应用程序。有多种方法可以跟踪应用程序在执行计算时实际发生的情况。成功弄清楚了,您将得到答案。