这篇文章讲的是Java中一个生成验证码的第三方库kaptcha。其实这个库在网上的资料也比较多,但是我看了下,都是结合在web开发当中的,可能有些小伙伴只需要生成验证码并保存成图片格式,所以这篇文章的主要目的也就是通过这个库来生成我们的验证码数据集。
kaptcha
1.导包
既然是Java开发的,我们第一步就是导包。
代码语言:txt复制https://mvnrepository.com/artifact/com.github.penggle/kaptcha/2.3.2
这里我给大家jar包的下载地址,当然你也可以使用maven来下载,此处我是直接使用maven下载的。
maven代码:
代码语言:txt复制<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
2.代码
由于很多小伙伴可能对Java开发不太熟悉,所以这里我不会讲解我是如何去写这些代码的,当然我会把每一句代码的含义告诉大家,不慌。
代码语言:txt复制import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Properties;
/**
* @author kuls
* @Desc 公众号:Python进击者
* @date 2020/4/24 7:55 上午
*/
public class demo1 {
public static void main(String[] args) throws IOException {
DefaultKaptcha dk = new DefaultKaptcha();
Properties properties = new Properties();
// 图片边框
properties.setProperty("kaptcha.border", "yes");
// 边框颜色
properties.setProperty("kaptcha.border.color", "105,179,90");
// 字体颜色
properties.setProperty("kaptcha.textproducer.font.color", "red");
// 图片宽
properties.setProperty("kaptcha.image.width", "110");
// 图片高
properties.setProperty("kaptcha.image.height", "40");
// 字体大小
properties.setProperty("kaptcha.textproducer.font.size", "30");
// session key
properties.setProperty("kaptcha.session.key", "code");
// 验证码长度
properties.setProperty("kaptcha.textproducer.char.length", "4");
// 字体
properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
//加鱼眼效果
properties.setProperty("kaptcha.obscurificator.impl","com.google.code.kaptcha.impl.FishEyeGimpy");
//加水纹效果
properties.setProperty("kaptcha.obscurificator.impl","com.google.code.kaptcha.impl.WaterRipple");
//加阴影效果
properties.setProperty("kaptcha.obscurificator.impl","com.google.code.kaptcha.impl.ShadowGimpy");
//配置
Config config = new Config(properties);
//将配置信息放入DefaultKaptcha
dk.setConfig(config);
for (int i = 0;i < 10000;i ){
//创建验证码中的文字
String text = dk.createText();
//根据文字创建一张验证码
BufferedImage image = dk.createImage(text);
//将BufferedImage转为图片
ImageIO.write(image,"jpg",new File("./yzm/" text "_" i ".jpg"));
}
}
}
上述代码直接拿来使用就行,前提是确定导包成功
。
关于kaptcha的其他参数,其实大部分需要使用的参数都在我的代码中使用过了。
生成的效果:
鱼眼:
水纹:
阴影:
大部分的网站使用到的都是kaptcha生成的验证码,所以我们可以利用所生成的库反向生成并且训练成模型,就能够轻易突破了。
有关于如何训练模型,请参考这篇文章我深度学习0基础,还训练出一个识别验证码模型!
总结
对于这种输入字母数字的破解思路,就是找到它所生成验证码的库是哪种,当然有一些网站是自己画出来的,我们也可以仿照它的模式去画出来。学会画验证码,肯定比使用这些库生成的验证码更加的安全,我们自己开发网站的时候,也可以尝试自己取画验证码。