java的证书签名_java签名证书

1 importjava.io.FileInputStream;2 importjava.security.KeyStore;3 importjava.security.PrivateKey;4 importjava.security.PublicKey;5 importjava.security.Signature;6 importjava.security.cert.Certificate;7 importjava.security.cert.CertificateFactory;8 importjava.security.cert.X509Certificate;9

10 importjavax.crypto.Cipher;11

12

13

14

15

16 public classCertificateCoder {17

18 public static final String CERT_TYPE="X.509";19

20

21

22 /**

23 * 获取私匙24 *@paramkeyStorePath25 *@parampwd26 *@paramalias27 *@returnPrivateKey 私匙28 *@throwsException29 */

30 private static PrivateKey getPrivateKey(String keyStorePath,String pwd,String alias) throwsException{31 KeyStore ks=getKeyStore(keyStorePath, pwd);32 return(PrivateKey)ks.getKey(alias, pwd.toCharArray());33

34 }35

36

37 /**

38 *39 *@paramkeyStorePath40 *@parampwd41 *@returnkeyStore 密匙库42 *@throwsException43 */

44 private static KeyStore getKeyStore(String keyStorePath,String pwd) throwsException{45 KeyStore ks=KeyStore.getInstance(KeyStore.getDefaultType());46 FileInputStream in=newFileInputStream(keyStorePath);47 ks.load(in,pwd.toCharArray());48 in.close();49 returnks;50 }51

52

53 /**

54 *55 *@paramcertificatePath56 *@returnCertificate 证书57 *@throwsException58 */

59 private static Certificate getCertificate(String certificatePath) throwsException{60 CertificateFactory factory=CertificateFactory.getInstance(CERT_TYPE);61 FileInputStream in=newFileInputStream(certificatePath);62 Certificate certificate=factory.generateCertificate(in);63 in.close();64 returncertificate;65

66 }67

68

69 /**

70 * 通过证书返回公匙71 *@paramcertificatePath72 *@returnPublickey 返回公匙73 *@throwsException74 */

75 private static PublicKey getPublicKeyByCertificate(String certificatePath) throwsException{76 Certificate certificate=getCertificate(certificatePath);77 returncertificate.getPublicKey();78 }79

80

81 /**

82 *83 *@paramkeyStorePath84 *@paramalias85 *@parampwd86 *@returnCertificate 证书87 *@throwsException88 */

89 private static Certificate getCertificate(String keyStorePath,String alias,String pwd) throwsException{90 KeyStore ks=getKeyStore(keyStorePath, pwd);91 //获取证书

92 returnks.getCertificate(alias);93 }94

95

96 /**

97 * 私匙加密98 *@paramdata99 *@paramkeyStorePath100 *@paramalias101 *@parampwd102 *@returnbyte[] 被私匙加密的数据103 *@throwsException104 */

105 public static byte[] encryptByPrivateKey(byte[] data,String keyStorePath,String alias,String pwd) throwsException{106 PrivateKey privateKey=getPrivateKey(keyStorePath, pwd, alias);107 //对数据进行加密

108 Cipher cipher=Cipher.getInstance(privateKey.getAlgorithm());109 cipher.init(Cipher.ENCRYPT_MODE, privateKey);110 returncipher.doFinal(data);111

112 }113

114

115 /**

116 * 私匙解密117 *@paramdata118 *@paramkeyStorePath119 *@paramalias120 *@parampwd121 *@returnbyte[] 私匙解密的数据122 *@throwsException123 */

124 public static byte[] decryptByPrivateKey(byte[] data,String keyStorePath,String alias,String pwd) throwsException{125 PrivateKey privateKey=getPrivateKey(keyStorePath, pwd, alias);126 Cipher cipher=Cipher.getInstance(privateKey.getAlgorithm());127 cipher.init(cipher.DECRYPT_MODE, privateKey);128 returncipher.doFinal(data);129 }130

131

132 /**

133 * 公匙加密134 *@paramdata135 *@paramcerPath136 *@returnbyte[] 被公匙加密的数据137 *@throwsException138 */

139 public static byte[] encryptByPublicKey(byte[] data,String cerPath) throwsException{140 //获取公匙

141 PublicKey publicKey=getPublicKeyByCertificate(cerPath);142 System.out.println(publicKey.getAlgorithm());143 Cipher cipher=Cipher.getInstance(publicKey.getAlgorithm());144 cipher.init(Cipher.ENCRYPT_MODE, publicKey);145 returncipher.doFinal(data);146 }147

148 /**

149 * 公匙解密150 *@paramdata151 *@paramcerPath152 *@return

153 *@throwsException154 */

155 public static byte[] decryptByPublicKey(byte[] data,String cerPath) throwsException{156 PublicKey publicKey=getPublicKeyByCertificate(cerPath);157 Cipher cipher=Cipher.getInstance(publicKey.getAlgorithm());158 cipher.init(Cipher.DECRYPT_MODE, publicKey);159 returncipher.doFinal(data);160 }161

162 /**

163 * 签名164 *@paramsign165 *@paramkeyStorePath166 *@parampwd167 *@paramalias168 *@return

169 *@throwsException170 */

171 public static byte[] sign(byte[] sign,String keyStorePath,String pwd,String alias) throwsException{172 //获取证书

173 X509Certificate x509=(X509Certificate)getCertificate(keyStorePath, alias, pwd);174 //构建签名,由证书指定签名算法

175 Signature sa=Signature.getInstance(x509.getSigAlgName());176 //获取私匙

177 PrivateKey privateKey=getPrivateKey(keyStorePath, pwd, alias);178 sa.initSign(privateKey);179 sa.update(sign);180 returnsa.sign();181 }182

183 /**

184 * 验证签名185 *@paramdata186 *@paramsign187 *@paramcerPath188 *@return

189 *@throwsException190 */

191 public static boolean verify(byte[] data,byte[] sign,String cerPath) throwsException{192 X509Certificate x509=(X509Certificate)getCertificate(cerPath);193 Signature sa=Signature.getInstance(x509.getSigAlgName());194 sa.initVerify(x509);195 sa.update(data);196 returnsa.verify(sign);197 }198 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值