您的位置:首页 > 编程语言 > Java开发

Java破解简单验证码

2015-10-14 09:32 260 查看
原文:Java破解简单验证码

源代码下载地址:http://www.zuidaima.com/share/1631472847784960.htm

前段时间写基于俺们学校教学管理平台的App,需要破解验证码,模拟登陆,然后抓取数据,显示在Android端

验证码破解的一般思路是下载验证码,提取出需要的部分,平均拆分成N(N=验证码字符个数)份

二值化(转化为黑白色,黑色为1,白色为0),取模,然后保存摸板

俺们学校的验证码比较弱,只有0-9 10个数字,建好这十个数字的模型

在模拟登陆之前先把验证码下载下来,也是提取出需要的部分,拆分,然后与摸板进行比较,这样验证码就能破解啦!

步骤总结如下:

(1)批量下载一部分验证码图片

(2)将这部分图片提取出需要的部分

(3)将提取出来的部分平均拆分成N(N=验证码字符个数)份

(4) 去噪,将图片灰度化与二值化

(5)提取每一个字符的特征,生成特征矢量或特征矩阵

(6)分类与学习。将特征矢量或特征矩阵与样本库进行比对,挑选出相似的那类样本,将这类样本的值作为输出结果。

下面借助代码和图片,具体讲解步骤:

(1)批量下载一部分验证码图片

这里借助了Apache的http://hc.apache.org/httpclient-3.x/

这个比较简单,代码就不贴了。所做的工作就是从 http://run.hbut.edu.cn/Account/GetValidateCode
下载了100张图片,保存到checkcode文件夹,命名为code_i.jgp

如图所示:




(2).将这部分图片提取出需要的部分

用windows自带的画图工具编辑图片,缩放到最大,如下图所示




可观察到周围有很多空白像素点,这些都是不需要的.裁剪出需要的部分,注意:要确保裁剪之后能平均裁剪为4等分

代码如下:
public static BufferedImage getSingleCode(BufferedImage image) {
return image.getSubimage(6, 5, 36, 12);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息