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

发布者:Xiaofeixiang
发布于:2023-04-18 11:48

以子之矛攻子之盾

上个礼拜因为家里的老人有感而发,思考了验证码适老化方面的改造。最近在思考AIGC在验证码方面的应用。

 

传统的验证码,总的来说,因为通常是将数字、字母、符号等随机组合在一起,形成一个图像,要求用户输入其中的内容。这种方式对于人类用户来说比较容易识别,但对于机器来说却很难识别,因此可以防止机器人攻击。

 

但是,传统的验证码技术已经被机器学习技术所攻破。一些恶意程序可以使用图像处理算法,将验证码图像进行分割、识别,从而成功攻击目标系统。

 

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

AIGC的具体应用

AIGC具体是什么我就不介绍了,不知道的自行百度即可。接下来我们直接进入正题,来看看AIGC怎么在验证码的应用(主要指的是图片验证码)。
图片描述

1.提高验证码复杂度

我们可以利用AIGC生成更复杂的验证码,如加入噪声、干扰线、曲线等,增加破解难度,从而去提高验证码的安全性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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相较于传统的验证码技术在自适应性、鲁棒性和安全性等方面更具优势。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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进行自适应学习,从而对新型验证码进行快速识别,提高验证码的可用性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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进行模型集成,将多个分类模型进行集成,提高验证码的分类准确率,这也是为了验证码的安全考虑。

1
2
3
4
5
6
7
8
9
10
11
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进行异常检测出异常的验证码,防止恶意攻击者利用验证码进行攻击。
这个步骤会比较繁琐。其实,还有一种方法可以做异常检测,那就是基于聚类的异常检测方法。不过采用机器学习的方法会更常用于验证码。

 

这一块的步骤会比较繁琐,我们先简单过一下步骤:

 

图片描述

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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主要是能从以上几个方面来提高验证码的安全性和可用性。整体来说,人工智能的发展还是非常迅速的,目前第五代无感验证码或许很快就要被“抛之脑后”了。

 

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

 

免费的验证码插件:滑动&图片验证码


声明:该文观点仅代表作者本人,转载请注明来自看雪