使用 Python 生成验证码
CAPTCHA 是完全自动化的区分计算机和人类的公共图灵测试的缩写,是许多网站用来检查访问网站的人是人类还是机器人的重要测试。这样做主要是出于安全原因,以便机器人无法侵入网站并抛出虚假统计数据并扭曲互联网流量。
其主要目的是生成对人类来说很容易但对机器人或其他计算机来说很难得出解决方案的测试。他们提出的测试利用了用户的认知和思考能力。
有各种类型的 CAPTCHA 可用。一些最常见的 CAPTCHA 类型包括:
-
基于图像的 CAPTCHA:向人类提供图像,并对特征进行扭曲,以使计算机难以识别图像。
-
基于文本的 CAPTCHA:提供一系列模糊字符,其特征经过扭曲并带有随机噪声,使字符识别变得困难。
-
基于音频的 CAPTCHA:向人类提供口语字符或剪辑的音频记录,人类需要将其正确输入系统。
-
行为 CAPTCHA:执行机器人可能难以复制/自动化的特定操作。
为了在 Python 中生成 CAPTCHA,我们需要在系统中安装库 PIL(Python 图像库)。为此,我们在系统中安装了 PIL 库的一个名为 Pillow 的分支。为此,我们在命令提示符中输入:
pip install Pillow
之后,我们可以在 Python 中导入 PIL 来生成我们的验证码。
示例 1
在此示例中,我们将学习使用 Python 生成基于文本的验证码。
算法
-
导入必要的库。
-
创建一个空白图像,背景为任意颜色
-
定义验证码的长度并加入一串随机单词。
-
自定义结果文本的字体和字体大小。
-
计算文本大小并将其放置在中心。
-
绘制计算出的文本图像,并为其添加打印在中心所需的值。
-
在图像上添加随机的噪声组合,并用黑色填充。
-
定义验证码图像的宽度、高度以及验证码的字符串长度。
-
保存验证码图像。
import random
from PIL import Image, ImageDraw, ImageFont
def generate_captcha(width, height, length):
# 创建一个带有黄色背景的空白图像
image = Image.new('RGB', (width, height), 'yellow')
draw = ImageDraw.Draw(image)
# 定义 CAPTCHA 中要使用的字符
characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
# 根据给定的长度生成随机字符串
captcha_text = ''.join(random.sample(characters, length))
# 定义字体及其大小
font = ImageFont.truetype('arial.ttf', 72)
# 计算文本大小并将其置于中心
t_width, t_height = draw.textsize(captcha_text, font)
text_x = (width - t_width) / 2
text_y = (height - t_height) / 2
#在图像中绘制文本
draw.text((text_x, text_y), captcha_text, font=font, fill='black')
#添加噪声以创建图像失真
for x in range(width):
for y in range(height):
if random.random() < 0.1:
draw.point((x, y), fill='black')
#返回生成的 CAPTCHA 图像和相应的文本
return image, captcha_text
width = 700 # CAPTCHA 图像的宽度
height = 350 # CAPTCHA 图像的高度
length = 6 # CAPTCHA 文本的长度
captcha_image, captcha_text = generate_captcha(width, height, length)
captcha_image.save('captcha.png')
我们将生成 CAPTCHA 所需的所有字符定义为字符串变量。定义 CAPTCHA 图像的字体(Arial)和字体大小后,将其放置在图像的中心非常重要。然后,我们使用 draw() 函数在空白图像上绘制此文本,并将颜色填充为"黑色"(可以更改为不同的颜色)。
然后,我们需要向图像添加噪声。这是通过在图像上启动 for 循环并检查随机值是否小于 0.1 来完成的(如果大于 0.1,则会非常明显)。然后将这些位置填充为黑色以产生图像失真,因为众所周知,计算机软件目前不具备处理非常嘈杂的数据的能力。
输出

结论
生成 CAPTCHA 是防止恶意和可疑机器人访问网站的有效方法。在这个当今技术蓬勃发展的世界里,每个网站都必须有 CAPTCHA,因为它比以往任何时候都更容易受到攻击和黑客攻击。
因此,由于技术的进步,以及实施了更好的高精度 OCR(光学字符识别)技术,一些机器人可能能够相对轻松地绕过 CAPTCHA。另一个问题是,恶意用户可以构建机器学习算法并基于 CAPTCHA 训练模型,并以此方式绕过测试。
相关文章
更多推荐


所有评论(0)