Java 程序生成 CAPTCHA 并验证用户

2024 年 9 月 10 日 | 阅读 3 分钟

CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart,全自动区分计算机和人类的公共图灵测试)是一种广泛用于区分人类用户和自动化机器人(bots)的安全机制。它以扭曲的文本或图像的形式向用户提出挑战,用户必须正确解读。在本节中,我们将探讨如何在 Java 中生成独特的 CAPTCHA 并验证用户是否为人类

生成独特的 CAPTCHA

要创建独特的 CAPTCHA,我们遵循一个涉及生成随机字符的过程。在 Java 中,我们可以通过以下方式实现:

  1. 字符集:首先定义一个你希望从中生成 CAPTCHA 的字符集。通常,它包括大小写字母和数字的混合。在这个例子中,我们将使用一个名为 `characters` 的字符数组来表示字符集。
  2. 随机生成:通过从字符集数组中选择一个随机索引来生成随机字符。可以使用 `Math.random()` 函数来实现。
  3. 构建 CAPTCHA:遍历选定的索引并将相应的字符附加起来以构建 CAPTCHA 字符串。我们可以通过控制迭代次数来指定 CAPTCHA 的所需长度。
  4. 返回 CAPTCHA:返回生成的 CAPTCHA 字符串。

CaptchaGenerator.java

输出

CAPTCHA: svGvwyc4m

确认用户的身份

在创建 CAPTCHA 并将其呈现给用户后,我们必须确认他们是人类。通常这包括:

  1. 用户输入:鼓励用户输入图片中显示的 CAPTCHA。
  2. 将用户的输入与创建的 CAPTCHA 进行比较。
  3. 成功或失败:如果用户的输入与生成的 CAPTCHA 匹配,则认为用户是人类。如果不是,可以要求他们重试。

这是比较用户输入与生成 CAPTCHA 的方法示例。

CaptchaMatch.java

输出

Generated CAPTCHA: QDf06rJYI
Enter the CAPTCHA: QDf06rJYI
CAPTCHA Matched

解释

它会生成一个随机的 CAPTCHA,要求用户输入,然后验证用户提供的输入是否与生成的 CAPTCHA 匹配。如果 CAPTCHA 匹配,它会打印“CAPTCHA Matched”(CAPTCHA 匹配);如果不匹配,则打印“CAPTCHA Not Matched”(CAPTCHA 不匹配)。

复杂度

时间复杂度:O(n)

空间复杂度:O(1)

在在线应用程序中使用 CAPTCHA

我们可以将生成的 CAPTCHA 显示在一个表单中,获取用户的答案,并使用验证函数对其进行验证,以便将 CAPTCHA 集成到 Web 应用程序中。对于更复杂和更安全的 CAPTCHA 解决方案,我们还可以利用现有的 Java 库,例如 Google 的 reCAPTCHA。

结论

总之,在 Java 中创建独特的 CAPTCHA 并确认用户的身份对于提高在线应用程序的安全性至关重要。通过使用上述方法创建能够区分自动化机器人和人类的 CAPTCHA,我们可以保护我们的在线应用程序免受潜在的威胁。