chenjiahe
2022-03-31 17efde9783495be35d850303df6931d58e198c5d
提交 | 用户 | age
cf178e 1 package com.hx.util.rsa;
C 2
3 import java.security.KeyFactory;
4 import java.security.PrivateKey;
5 import java.security.PublicKey;
6 import java.security.spec.PKCS8EncodedKeySpec;
7 import java.security.spec.X509EncodedKeySpec;
8
9
10
11 /**
12  * RSA签名验签类
13  */
14 public class RSASignature{
15
16     /**
17      * 签名算法
18      */
19     public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
20
21     /**
22      * RSA签名
23      * @param content 待签名数据
24      * @param privateKey 商户私钥
25      * @param encode 字符集编码
26      * @return 签名值
27      */
28     public static String sign(String content, String privateKey, String encode) {
29         try {
30             PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decode(privateKey) );
31
32             KeyFactory keyf = KeyFactory.getInstance("RSA");
33             PrivateKey priKey = keyf.generatePrivate(priPKCS8);
34
35             java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
36
37             signature.initSign(priKey);
38             signature.update( content.getBytes(encode));
39
40             byte[] signed = signature.sign();
41
42             return Base64.encode(signed);
43         }
44         catch (Exception e)
45         {
46             e.printStackTrace();
47         }
48
49         return null;
50     }
51
52     public static String sign(String content, String privateKey) {
53         try{
54             PKCS8EncodedKeySpec priPKCS8     = new PKCS8EncodedKeySpec( Base64.decode(privateKey) );
55             KeyFactory keyf = KeyFactory.getInstance("RSA");
56             PrivateKey priKey = keyf.generatePrivate(priPKCS8);
57             java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
58             signature.initSign(priKey);
59             signature.update( content.getBytes());
60             byte[] signed = signature.sign();
61             return Base64.encode(signed);
62         } catch (Exception e) {
63             e.printStackTrace();
64         }
65         return null;
66     }
67
68     /**
69      * RSA验签名检查
70      * @param content 待签名数据
71      * @param sign 签名值
72      * @param publicKey 分配给开发商公钥
73      * @param encode 字符集编码
74      * @return 布尔值
75      */
76     public static boolean doCheck(String content, String sign, String publicKey,String encode) {
77         try {
78             KeyFactory keyFactory = KeyFactory.getInstance("RSA");
79             byte[] encodedKey = Base64.decode(publicKey);
80             PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
81
82
83             java.security.Signature signature = java.security.Signature
84                     .getInstance(SIGN_ALGORITHMS);
85
86             signature.initVerify(pubKey);
87             signature.update( content.getBytes(encode) );
88
89             boolean bverify = signature.verify( Base64.decode(sign) );
90             return bverify;
91
92         } catch (Exception e) {
93             e.printStackTrace();
94         }
95
96         return false;
97     }
98
99     public static boolean doCheck(String content, String sign, String publicKey) {
100         try {
101             KeyFactory keyFactory = KeyFactory.getInstance("RSA");
102             byte[] encodedKey = Base64.decode(publicKey);
103             PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
104
105
106             java.security.Signature signature = java.security.Signature
107                     .getInstance(SIGN_ALGORITHMS);
108
109             signature.initVerify(pubKey);
110             signature.update( content.getBytes() );
111
112             boolean bverify = signature.verify( Base64.decode(sign) );
113             return bverify;
114
115         } catch (Exception e) {
116             e.printStackTrace();
117         }
118
119         return false;
120     }
121
122 }