以子之矛攻子之盾

上个礼拜由于家里的老人有感而发,考虑了验证码适老化方面的改造。最近在考虑AIGC在验证码方面的运用。

传统的验证码,总的来说,由于通常是将数字、字母、符号等随机组合在一起,构成一个图画,要求用户输入其中的内容。这种方法关于人类用户来说比较容易辨认,但关于机器来说却很难辨认,因而能够避免机器人进犯。

可是,传统的验证码技能已经被机器学习技能所攻破。一些恶意程序能够运用图画处理算法,将验证码图画进行切割、辨认,从而成功进犯方针体系。

这个时分,咱们就需要“以子之矛攻子之盾”,看看能不能利用AIGC进步验证码的可用性和安全性。

AIGC的详细运用

AIGC详细是什么我就不介绍了,不知道的自行百度即可。接下来咱们直接进入正题,来看看AIGC怎么在验证码的运用(首要指的是图片验证码)。

AIGC+图片验证码会有什么效果?

1.进步验证码杂乱度

咱们能够利用AIGC生成更杂乱的验证码,如加入噪声、搅扰线、曲线等,增加破解难度,从而去进步验证码的安全性。

from captcha.image import ImageCaptcha
import random
# 生成杂乱验证码
def generate_complex_captcha():
    captcha = ImageCaptcha(width=200, height=50)
    captcha_text = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 4))
    captcha_image = captcha.generate_image(captcha_text)
    captcha_image = captcha.create_noise_curve(captcha_image, captcha_image.getcolors())
    captcha_image = captcha.create_noise_dots(captcha_image, captcha_image.getcolors())
    captcha_image = captcha.create_captcha_image(captcha_text, 'black', captcha_image.getcolors())
    return captcha_text, captcha_image
# 保存杂乱验证码
captcha_text, captcha_image = generate_complex_captcha()
captcha_image.save(captcha_text + '.png')

2.集成多种验证码类型

运用AIGC集成多种类型的验证码,如文字、数字、图形、音频等,使验证码愈加丰厚多样,增加破解难度,进步验证码的安全性。

这个功能其完成有传统的验证码也有,即,经过人工设计算法来完成生成多种类型的验证码,可是这种生成方法目前真的都是已知的进犯方法。

而AIGC能够经过学习数据集中的特征和模式,自动学习生成各种类型的验证码,乃至能够应对不知道的进犯方法。此外,AIGC还能够运用集成学习*(下面会讲)*的方法,经过多个模型的组合来进步分类准确性和抗进犯才能。因而,AIGC相较于传统的验证码技能在自适应性、鲁棒性和安全性等方面更具优势。

from captcha.audio import AudioCaptcha
from captcha.image import ImageCaptcha
import random
# 生成多种类型验证码
def generate_multiple_captchas():
    captcha_type = random.choice(['audio', 'image'])
    if captcha_type == 'audio':
        captcha = AudioCaptcha()
        captcha_text = ''.join(random.sample('0123456789', 4))
        captcha_data = captcha.generate(captcha_text)
    else:
        captcha = ImageCaptcha()
        captcha_text = ''.join(random.sample('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 4))
        captcha_data = captcha.generate(captcha_text)
    return captcha_type, captcha_text, captcha_data
# 保存多种类型验证码
captcha_type, captcha_text, captcha_data = generate_multiple_captchas()
if captcha_type == 'audio':
    with open(captcha_text + '.wav', 'wb') as f:
        f.write(captcha_data)
else:
    captcha_data.save(captcha_text + '.png')

3.自适应学习

就像第二点说的,运用AIGC进行自适应学习,从而对新式验证码进行快速辨认,进步验证码的可用性。

from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
import numpy as np
# 加载数据集
X = load_dataset()
# 区分练习集和测验集
X_train, X_test = train_test_split(X, test_size=0.2, random_state=42)
# 构建分类器
clf = MLPClassifier(hidden_layer_sizes=(100,), max_iter=1000, alpha=1e-4, solver='adam', tol=1e-4, random_state=42)
# 练习分类器
clf.fit(X_train, y_train)
# 测验分类器
score = clf.score(X_test, y_test)
print('Test accuracy:', score)
# 运用分类器进行自适应学习
new_captcha = load_new_captcha()
if clf.predict(new_captcha) == 1:
    # 验证码为正常值,加入数据集进行自适应学习
    X = np.concatenate([X, new_captcha])
    y = np.concatenate([y, [1]])
    clf.fit(X, y)

4.模型集成

运用AIGC进行模型集成,将多个分类模型进行集成,进步验证码的分类准确率,这也是为了验证码的安全考虑。

from sklearn.ensemble import VotingClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
import numpy as np
# 加载数据集
X = load_dataset()
# 区分练习集和测验集
X_train, X_test, y_train,

5.反常检测

运用AIGC进行反常检测出反常的验证码,避免恶意进犯者利用验证码进行进犯。 这个过程会比较繁琐。其实,还有一种方法能够做反常检测,那就是根据聚类的反常检测方法。不过采用机器学习的方法会更常用于验证码。

这一块的过程会比较繁琐,咱们先简单过一下过程:

AIGC+图片验证码会有什么效果?

import numpy as np
import pandas as pd
from sklearn.svm import OneClassSVM
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
# 读取数据
data = pd.read_csv('captcha_dataset.csv')
# 区分数据集
train_data = data[:800]
val_data = data[800:900]
test_data = data[900:]
# 提取特征
X_train = train_data.drop(columns=['label']).values
X_val = val_data.drop(columns=['label']).values
X_test = test_data.drop(columns=['label']).values
# 练习模型
clf = OneClassSVM(kernel='rbf', gamma=0.1, nu=0.1)
clf.fit(X_train)
# 测验模型
y_pred_train = clf.predict(X_train)
y_pred_val = clf.predict(X_val)
y_pred_test = clf.predict(X_test)
# 计算性能指标
print('Training set performance:')
print('Accuracy: {:.2f}'.format(accuracy_score(np.ones(len(X_train)), y_pred_train)))
print('Precision: {:.2f}'.format(precision_score(np.ones(len(X_train)), y_pred_train)))
print('Recall: {:.2f}'.format(recall_score(np.ones(len(X_train)), y_pred_train)))
print('F1 score: {:.2f}'.format(f1_score(np

结语

从收集到的材料来看,AIGC首要是能从以上几个方面来进步验证码的安全性和可用性。整体来说,人工智能的发展还是非常敏捷的,目前第五代无感验证码或许很快就要被“抛之脑后”了。

咱们啊,要活到老,学到死。

验证码产品:免费运用