hash - 这可能是哪个哈希函数?

标签 hash

我有一些字符串和它们的一些哈希值,但我不知道使用哪个哈希函数。有什么想法吗?

String        hash

NN34W    f8b46bcdc3b3c92
EM3M3    d8015ca876fd051
HXDKD    a740e97464e5dfe
AKREJ    aa7aa2dadfcbe53
3bNMK    0f11440639191d9

编辑:

感谢您的回答,这是验证码的哈希值。

https://registracia.azet.sk/

如果查看验证码图片的URL,最后是HASH值。这个

在服务器上,通过 HTTP POST 发送TEXT: (P92M4) 和 HASH (72fec89a2e0ade2) 以及其他值。

我喜欢知道如何计算文本P92M4的哈希值,并用哈希值进行控制,该值在服务器上发送。

因为我喜欢为我的学校项目制作自己的验证码系统,所以我首先分析情况和弱点。

最佳答案

据我了解您的情况,POST 请求会将“文本”和“哈希”发送到 CAPTCHA 服务器。然后,它使用他们用来散列您的文本的任何散列函数,检查它是否与散列匹配,并决定您是否成功。据推测,服务器会向您发送图像以及哈希值,然后您输入文本。

因此,如果您找到了哈希函数,您就已经完全破坏了这个验证码系统:您需要做的就是使用哈希函数对任何字符串进行哈希处理,然后在发送 POST 请求时忽略哈希值他们发送给您,只需向他们发送您的计算文本和哈希对。因此,您可以非常轻松地自动成功通过验证码挑战。

为了说明“反转”散列可能有多困难,请考虑他们很可能使用的以下散列:

  • 将 TEXT 拆分为交替字母:因此 ABCDE 变为 ACE 和 BD
  • 使用盐“fj49w0utw4a”和“r8h3wlsd”对两半进行md5
    • md5("fj49w0utw4a"."ACE") 为 115c05f0e5300f958ba01caa64b989f
    • md5("r8h3wlsd"."BD") 为 74eecae86ef46382eb95443a1b1fa8f5
  • 取第一个字符串的每 3 个字符和第二个字符串的每 4 个字符,并交替使用它们,直到有 15 个字符
    • 115c05f0e5300f958ba01caa64b989f 变为 55e09b1ab9
    • 74eecae86ef46382eb95443a1b1fa8f5 变为 e8425af5
    • “ABCDE”的最终哈希值:5e58e402 95ba1fa

您确实无法对其进行逆向工程。


更新
请注意,上述验证码(并在该网站上实现)非常不安全,因为它们只需要知道一个有效的文本/哈希组合

为了进行演示,请使用 Firebug 或等效工具并导航到表单的验证码区域。我们将编辑一些隐藏值。

  • form[captcha_url] 值从 https://pokec.azet.sk/sluzby/system/captcha/[somehash] 更改为 https://pokec.azet.sk/sluzby/system/captcha/ee2be1f239e5d17
  • form[captcha_hash] 值从 [somehash] 更改为 ee2be1f239e5d17
  • 无论图片内容如何,​​请输入“P22KD”作为验证码

有多种方法可以缓解此漏洞。正如 Tangrs 所建议的,您可以将哈希值存储在 session 变量中,这样客户端就无法对其进行操作。不太优雅但也很有效的方法是将提交的验证码存储在数据库中,并且不允许重复的验证码,就像问题中的链接上实现的那样。这很好,直到您开始用完未使用的验证码并最终发生冲突。

关于hash - 这可能是哪个哈希函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3190736/

相关文章:

c - BLAKE2 输入参数

python-3.x - 使用 apply 散列每行 Pandas 数据框列

algorithm - 为什么哈希表查找只需要 O(1) 时间,而搜索键是 O(n)?

python - 更改 ImageHash Python 库中的哈希大小

java - 为什么在调整 HashTable 实现大小时会出现 OutOfMemoryError 错误?

function - 最适合实现此 DSL 的语言是什么?

ruby - 将元素从 Ruby 哈希插入到 SQLite 3 的最快方法

条件跳转或移动取决于未初始化的值

java - 创建一个通用数组以在 Java 中与哈希表一起使用

java - Java 中分段 S3 上传的 eTag 算法?