知识大全 使用JAVA数字证书做数字签名认证
Posted 内容
篇首语:不傲才以骄人,不以宠而作威。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用JAVA数字证书做数字签名认证相关的知识,希望对你有一定的参考价值。
使用JAVA数字证书做数字签名认证 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
keytool genkey keystore chinajavaworld keystore alias chinajavaworld
这个命令用来产生一个密匙库 执行完毕后会在当前操作目录中产生一个chinajavaworld keystore的文件 在执行命令的时候还有提示你输入密匙库的密码 要记住 后面还要用到
keytool export keystore chinajavaworld keystore
alias chinajavaworld file chinajavaworld cer
这个命令用来产生签名时所要用的证书
在JAVA里操作 将Cer内容改为BASE 编码
//从密钥库中读取CA证书
String storepass = ;
//前面设置的密码
FileInputStream in = new FileInputStream( e:\\\\license\\\\a\\\\chinajavaworld keystore ); KeyStore ks = KeyStore getInstance( JKS ); ks load(in storepass toCharArray());
//获取证书 java security cert Certificate c = ks getCertificate( chinajavaworld );
//BASE 编码 System out println(StringUtils encodeBase (c getEncoded()));
//将chinajavaworld cer内容改为这里输出的内容
开始产生(测试)签名
Signature signature;
try
InputStream streamCert = new java io FileInputStream( e:\\\\license\\\\a\\\\test cer );
CertificateFactory factory = CertificateFactory getInstance( X );
Certificate cert = factory generateCertificate(streamCert);
System out println(StringUtils encodeBase (cert getEncoded()));
signature = Signature getInstance( SHA withDSA );
signature initVerify(cert getPublicKey());
//要签名的指纹内容
String sss = Wele to ww The java world for you forever ;
//获取CA证书私钥
PrivateKey priKey=(PrivateKey)ks getKey( test storepass toCharArray());
System out println( priKey: +StringUtils encodeHex(priKey getEncoded()));
//用私钥签名
sig = Signature getInstance( SHA withDSA );
sig initSign(priKey);
ByteArrayOutputStream streamRaw = new ByteArrayOutputStream();
DataOutputStream streamSig = new DataOutputStream(streamRaw );
streamSig writeUTF(sss); sig update(streamRaw toByteArray());
String signatureS = StringUtils encodeHex(sig sign());
System out println( signature: +signatureS);
//用公钥做验证测试
System out println( pubKey: +StringUtils encodeHex(cert getPublicKey() getEncoded()));
ByteArrayOutputStream streamRaw = new ByteArrayOutputStream();
DataOutputStream streamSig = new DataOutputStream(streamRaw);
streamSig writeUTF(sss); signature update(streamRaw toByteArray());
System out println( verify: +signature verify(StringUtils decodeHex(signatureS)));
catch(Exception e)
System out println(e);
接下来 你就可以把chinajavaworld cer和签名放在你的产品目录里了 认证的时候读取cer证书中的公钥 对签名内容进行认证就可以了
附
public static String encodeBase (byte data[])
boolean lineSep = false;
int sLen = data == null ? : data length;
(sLen == ) return new String( );
int eLen = (sLen / ) * ;
int cCnt = (sLen ) / + << ;
int dLen = cCnt + (lineSep ? (cCnt ) / << : );
char dArr[] = new char[dLen];
int s = ;
int d = ;
int cc = ;
do
if(s >= eLen)
break;
int i = (data[s++] & xff) << | (data[s++] & xff) << | data[s++] & xff;
dArr[d++] = CA[i >>> & x f];
dArr[d++] = CA[i >>> & x f];
dArr[d++] = CA[i >>> & x f];
dArr[d++] = CA[i & x f];
if(lineSep && ++cc == && d < dLen )
dArr[d++] = \\r ;
dArr[d++] = \\n ;
cc = ;
while(true);
int left = sLen eLen;
if(left > )
int i = (data[eLen] & xff) << | (left != ? : (data[sLen ] & xff) << );
dArr[dLen ] = CA[i >> ]; dArr[dLen ] = CA[i >>> & x f];
dArr[dLen ] = left != ? = : CA[i & x f]; dArr[dLen ] = = ;
return new String(dArr);
public static final String encodeHex(byte bytes[])
StringBuffer buf = new StringBuffer(bytes length * );
for(int i = ; i < bytes length; i++)
if((bytes[i] & xff) < ) buf append( );
buf append(Long toString(bytes[i] & xff ));
return buf toString();
public static final byte[] decodeHex(String hex)
char chars[] = hex toCharArray();
byte bytes[] = new byte[chars length / ];
int byteCount = ;
for(int i = ; i < chars length; i += )
int newByte = ;
newByte |= hexCharToByte(chars[i]);
newByte <<= ;
newByte |= hexCharToByte(chars[i + ]);
cha138/Article/program/Java/hx/201311/26624相关参考
前些时候做毕业设计用java做的数字图像处理方面的东西这方面的资料ms比较少发点东西上来大家共享一下主要就是些算法有自己写的有人家的还有改人家的有的算法
电子投标用的ca数字认证证书怎么办理一般都是到当地的发包交易中心(熟称一级市场)或者招投标管理部门按要求提供资料办理的。一般需要提交营业执照、资质证书,组织机构程式码证等影印件,授权委托书,授权人和被
Java加密和数字签名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java加密和数字签名本文
知识大全 Java SE 6中XML数字签名标准Java接口
JavaSE6中XML数字签名标准Java接口 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 级
Java2下Applet数字签名 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 自从Java技术
Java加密和数字签名1消息摘要 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文主要谈一下密
Java常用的加密解密数字签名等API 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 常用API
生成密钥对 生成密钥对可用java提供的类KeyPairGenerator用其中的getInstance方法创建KeypairGenerator对象在用initialize进行初始化最后用gen
Java中使用密钥库和算法创建数字证书 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 实例说明
学java考什么证书对就业最有利?xuejava靠SCJP整数对就业最有利的这是sun公司官方的认证考试。SCJP是Sun提供的针对J2SE的两项认证之一,另一个是SCJD。CJP主要考察开发人员掌握