int g = fc + (bc - fc),int b = fc + (bc - fc),客户机使用已安装的公共CA证书通过这个证书验证服务器的身份,然后可以对这个jar文件进行数字签名 有97%新玩家认为java数字验证码识别(java验证码识别)值得一读!

{image}

4条解答

一.用Java做一个验证码识别的程序要识别的验证码httpgroupbjchina

验证码识别,费力效果差 ,除非非常简单的图片,否则极难识别,而让游且验证码图片的代码 ,人家只需要稍微弄复杂点,识别的复杂度直线上升,成功率直线下降 。像hotmail, google, yahoo那种就直接放弃 ,

不过像这种简单的 ,你可以试试,用模式匹配:

例如单个数字大小是16 * 16像素, 那就划分成16*16块 ,每个块1个像素,编号,特征就是a[0][0] - 白 , a[0][1] - 白, a[0][2]黑空滑念……这种,存下来,把要识别的图片上的数字 ,也这样处理,然后跟保存下来的特征码进行匹配就行了,看看有多少是一样的 ,超过50%就可以认为找到了,或者把阈值设更低点

难点在于要识别的图片上面有干扰点,要排除 ,以你给出的图片来说 ,可以这样:
1. 先统一黑白:如果一个像素跟白色很接近,就认为是白色,否则认为是黑色。(如果底色是随机的 ,那就把区域色块最大的认为是白斗困色,其他的黑色)
2. 每个像素周围有8个像素,计算出这个区域内的平均灰度 ,例如这9个点中超过4个是黑色,那就认为这个像素是黑色

二.用java实现:随机获取4位的验证码

验证码是指网页的验证码还是手机的验证码
下面是随机生成四位数的相关代码

import ;

public class RandomTest {
public static void main(String[] args) {
("得到小数");
((() * ));
("Random");
(new Random().nextInt(9999));
("字符串前面补0的话就这样");
(("%04d",new Random().nextInt(9999)));
}
}public static void main(String[] args){
Random d = new Random();
String str = "";
for(int i=0;i<4;i++){
int num = (10);
str += num+"";
}
(str);
}

希望能帮到你for (int i = 0; i < 4; i++) {
((int) (() * 10));

}public static void processrequest(httpservletrequest request,
httpservletresponse response) throws servletexception, ioexception {

ttype("image/jpeg");
("pragma", "no-cache");
("cache-control", "no-cache");
ader("expires", 0);
httpsession session = n();

int width = 60, height = 20;

bufferedimage image = new bufferedimage(width, height,
_int_rgb);

// 获取图形上下文
graphics g = cs();

// 生成随机类
random random = new random();

// 设定背景色
(getrandcolor(200, 250));
(0, 0, width, height);

// 设定字体
(new font("times new roman", , 18));

// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
(getrandcolor(160, 200));
for (int i = 0; i < 155; i++) {
int x = (width);
int y = (height);
int xl = (12);
int yl = (12);
(x, y, x + xl, y + yl);
}

// 取随机产生的认证码(4位数字)
string srand = "";
for (int i = 0; i < 4; i++) {
string rand = ((10));
srand += rand;
// 将认证码显示到图象中
(new color(20 + (110), 20 + random
.nextint(110), 20 + (110)));// 调用函数出来的颜色相同 ,可能是因为种子太接近,所以只能直接生成
g(rand, 13 * i + 6, 16);
}

// 将认证码存入session
ute("rand", srand);
// 图象生效
();
servletoutputstream responseoutputstream = stream();
// 输出图象到页面
(image, "jpeg", responseoutputstream);

// 以下关闭输入流!
();
();
}

static color getrandcolor(int fc, int bc) {
// 给定范围获得随机颜色
random random = new random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + (bc - fc);
int g = fc + (bc - fc);
int b = fc + (bc - fc);
return new color(r, g, b);
}

/
handles the http get method.

@param request
servlet request
@param response
servlet response
*/
protected void doget(httpservletrequest request,
httpservletresponse response) throws servletexception, ioexception {
processrequest(request, response);
}这个是我web里用的验证码,你可以改改

三.Java加密和数字签名5数字证书情况是什么

数字证书还有个问题 ,就是公钥问题,A用私钥加密了,那么B接受到消息后 ,用A提供的公钥解密;那么现在有个讨厌的C ,他把消息拦截了,然后用自己的私钥加密,同时把自己的公钥发给B ,并告诉B,那是A的公钥,结果…… ,这时候就需要一个中间机构出来说话了(相信权威,我是正确的),就出现了CertificateAuthority(也即CA) ,有名的CA机构有Verisign等,目前数字认证的工业标准是:CCITT的X。509:数字证书:它将一个身份标识连同公钥一起进行封装,并由称为认证中心或CA的第三方进行数字签名 。密钥库:java平台为你提供了密钥库 ,用作密钥和证书的资源库。从物理上讲,密钥库是缺省名称为。keystore的文件(有一个选项使它成为加密文件) 。密钥和证书可以拥有名称(称为别名),每个别名都由唯一的密码保护 。密钥库本身也受密码保护;您可以选择让每个别名密码与主密钥库密码匹配。使用工具keytool ,我们来做一件自我认证的事情吧(相信我的认证):1、创建密钥库keytool- genkey-v-aliasfeiUserKey- keyalgRSA默认在自己的home目录下(windows系统是c:documentsandsettings目录下的。keystore文件) ,创建我们用RSA算法生成别名为feiUserKey的自签名的证书,如果使用了- keystoremm就在当前目录下创建一个密钥库mm文件来保存密钥和证书 。2 、查看证书:keytool- list列举了密钥库的所有的证书也可以在dos下输入keytool- help查看帮助。JAR的签名我们已经学会了怎样创建自己的证书了,现在可以开始了解怎样对JAR文件签名 ,JAR文件在Java中相当于ZIP文件,允许将多个Java类文件打包到一个具有。jar扩展名的文件中,然后可以对这个jar文件进行数字签名 ,以证实其来源和真实性 。该JAR文件的接收方可以根据发送方的签名决定是否信任该代码,并可以确信该内容在接收之前没有被篡改过。同时在部署中,可以通过在策略文件中放置访问控制语句根据签名者的身份分配对机器资源的访问权。这样 ,有些Applet的安全检验访问就得以进行 。使用jarsigner工具可以对jar文件进行签名:现在假设我们有个Test。jar文件(可以使用jar命令行工具生成):jarsignerTest。jarfeiUserKey(这里我们上面创建了该别名的证书),详细信息可以输入jarsigner查看帮助验证其真实性:jarsigner- verifyTest 。jar(注意,验证的是jar是否被修改了 ,但不检验减少的,如果增加了新的内容,也提示 ,但减少的不会提示。)使用Applet中:然后浏览器就会提示你:准许这个会话- 拒绝-始终准许- 查看证书等。安全套接字层(SSLSecureSocketsLayer)和传输层安全性(TLSTransportLayerSecurity)安全套接字层和传输层安全性是用于在客户机和服务器之间构建安全的通信通道的协议 。它也用来为客户机认证服务器 ,以及(不太常用的)为服务器认证客户机 。该协议在浏览器应用程序中比较常见,浏览器窗口底部的锁表明SSL/TLS有效:1)当使用SSL/TLS(通常使用https://URL)向站点进行请求时,从服务器向客户机发送一个证书。客户机使用已安装的公共CA证书通过这个证书验证服务器的身份 ,然后检查IP名称(机器名)与客户机连接的机器是否匹配。2)客户机生成一些可以用来生成对话的私钥(称为会话密钥)的随机信息,然后用服务器的公钥对它加密并将它发送到服务器 。服务器用自己的私钥解密消息,然后用该随机信息派生出和客户机一样的私有会话密钥。通常在这个阶段使用RSA公钥算法。3)客户机和服务器使用私有会话密钥和私钥算法(通常是RC4)进行通信 。使用另一个密钥的消息认证码来确保消息的完整性。java中javax。net 。ssl。SSLServerSocketFactory类提供了一个很好的SSLServerSocker的工厂类 ,熟悉Socket编程的读者可以去练习。当编写完服务器端之后,在浏览器上输入https://主机名:端口就会通过SSL/TLS进行通话了 。注意:运行服务端的时候要带系统环境变量运行:javax。net。ssl 。keyStore=密钥库(创建证书时,名字应该为主机名 ,比如localhost)和javax 。net。ssl。keyStorePassword=你的密码Java代码packagesecurity;importjava 。security。;importjava。security 。PublicKey;importjava。io。;importjava 。util。;importjava。security 。;importjava。security。cert 。;importsun 。security。x509。;importjava 。security。cert。Certificate;importjava 。security。cert。CertificateFactory;/此例是对“数字证书 ”文件的操作java平台(在机器上安装jdk)为你提供了密钥库(证书库),cmd下提供了keytool命令就可以创建证书库在运行此例前:在c盘目录下创建一个证书,指定证书库为BocsoftKeyLib ,创建别名为TestCertification的一条证书,它指定用RSA算法生成,且指定密钥长度为1024 ,证书有效期为1年导出证书文件为TC 。cer已存于本地磁盘C:/密码是keystore*/publicclassDigitalCertificate{publicstaticvoidmain(String[]args){try{//前提:将证书库中的一条证书导出到证书文件(我写的例子里证书文件叫TC。cer)//从证书文件TC。cer里读取证书信息以上是分析内容 ,仅供参考,谢谢! 。

四.Java如何加密和数字签名

数字签名:数字签名,它是确定交换消息的通信方身份的第一个级别。上面A通过使用公钥加密数据后发给B ,B利用私钥解密就得到了需要的数据,问题来了,由于都是使用公钥加密 ,那么如何检验是A发过来的消息呢?上面也提到了一点,私钥是唯一的,那么A就可以利用A自己的私钥进行加密 ,然后B再利用A的公钥来解密,就可以了;数字签名的原理就基于此,而通常为了证明发送数据的真实性 ,通过利用消息摘要获得简短的消息内容,然后再利用私钥进行加密散列数据和消息一起发送。java中为数字签名提供了良好的支持,java 。security 。Signature类提供了消息签名:Java代码/DigitalSignature2Example。javaCopyright2005-2-16*/importjava。security 。Signature;importjava。security。KeyPairGenerator;importjava 。security。KeyPair;importjava。security 。SignatureException;/数字签名 ,使用RSA私钥对对消息摘要签名 ,然后使用公鈅验证测试/publicclassDigitalSignature2Example{publicstaticvoidmain(String[]args)throwsException{if(args。length!=1){System。err 。println("Usage:javaDigitalSignature2Example");System。exit(1);}byte[]plainText=args[0]。getBytes("UTF8");//形成RSA公钥对System 。out 。println("StartgeneratingRSAkey");KeyPairGeneratorkeyGen=KeyPairGenerator。getInstance("RSA");keyGen。initialize(1024);KeyPairkey=keyGen 。generateKeyPair();System。out。println("FinishgeneratingRSAkey");//使用私鈅签名来源:考试大的美女编辑们Signaturesig=Signature 。getInstance("SHA1WithRSA");sig。initSign(key。getPrivate());sig 。update(plainText);byte[]signature=sig。sign();System。out 。println(sig。getProvider()。getInfo());System 。out 。println("Signature:");System。out。println(newString(signature,"UTF8"));//使用公鈅验证System 。out。println("Startsignatureverification");sig。initVerify(key 。getPublic());sig。update(plainText);try{if(sig。verify(signature)){System 。out。println("Signatureverified");}elseSystem。out 。println("Signaturefailed");}catch(SignatureExceptione){System。out。println("Signaturefailed");}}} 。

本文版权归趣快排www.sEoguruBlog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ✈61910465