知识大全 使用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数字图像处理常用算法

    前些时候做毕业设计用java做的数字图像处理方面的东西这方面的资料ms比较少发点东西上来大家共享一下主要就是些算法有自己写的有人家的还有改人家的有的算法

知识大全 电子投标用的ca数字认证证书怎么办理

电子投标用的ca数字认证证书怎么办理一般都是到当地的发包交易中心(熟称一级市场)或者招投标管理部门按要求提供资料办理的。一般需要提交营业执照、资质证书,组织机构程式码证等影印件,授权委托书,授权人和被

知识大全 Java加密和数字签名

Java加密和数字签名  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java加密和数字签名本文

知识大全 Java SE 6中XML数字签名标准Java接口

JavaSE6中XML数字签名标准Java接口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  级

知识大全 Java2下Applet数字签名

Java2下Applet数字签名  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  自从Java技术

知识大全 Java加密和数字签名 1消息摘要

Java加密和数字签名1消息摘要  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文主要谈一下密

知识大全 Java常用的加密 解密 数字签名等API

Java常用的加密解密数字签名等API  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  常用API

知识大全 如何在java中编程实现数字签名系统

  生成密钥对  生成密钥对可用java提供的类KeyPairGenerator用其中的getInstance方法创建KeypairGenerator对象在用initialize进行初始化最后用gen

知识大全 Java中使用密钥库和算法创建数字证书

Java中使用密钥库和算法创建数字证书  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  实例说明 

知识大全 学java考什么证书对就业最有利

学java考什么证书对就业最有利?xuejava靠SCJP整数对就业最有利的这是sun公司官方的认证考试。SCJP是Sun提供的针对J2SE的两项认证之一,另一个是SCJD。CJP主要考察开发人员掌握