diff --git a/IJPay-Core/src/main/java/com/ijpay/core/kit/RsaKit.java b/IJPay-Core/src/main/java/com/ijpay/core/kit/RsaKit.java
index 962f9ae3cc3caf199e6252d3c890efdabdb2fd60..17acda866a09b11ee6b10c0497b2c203bc2da652 100644
--- a/IJPay-Core/src/main/java/com/ijpay/core/kit/RsaKit.java
+++ b/IJPay-Core/src/main/java/com/ijpay/core/kit/RsaKit.java
@@ -5,16 +5,14 @@ import cn.hutool.core.util.StrUtil;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.*;
import java.util.HashMap;
import java.util.Map;
-import java.util.Properties;
/**
*
IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。
@@ -49,7 +47,7 @@ public class RsaKit {
/**
* 生成公钥和私钥
*
- * @throws Exception
+ * @throws Exception 异常信息
*/
public static Map getKeys() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
@@ -77,7 +75,7 @@ public class RsaKit {
*
* @param modulus 模
* @param exponent 公钥指数
- * @return
+ * @return {@link RSAPublicKey}
*/
public static RSAPublicKey getPublicKey(String modulus, String exponent) {
try {
@@ -99,7 +97,7 @@ public class RsaKit {
*
* @param modulus 模
* @param exponent 指数
- * @return
+ * @return {@link RSAPrivateKey}
*/
public static RSAPrivateKey getPrivateKey(String modulus, String exponent) {
try {
@@ -120,12 +118,20 @@ public class RsaKit {
* @param data 需要加密的数据
* @param publicKey 公钥
* @return 加密后的数据
- * @throws Exception
+ * @throws Exception 异常信息
*/
public static String encryptByPublicKey(String data, String publicKey) throws Exception {
return encryptByPublicKey(data, publicKey, "RSA/ECB/PKCS1Padding");
}
+ /**
+ * 公钥加密
+ *
+ * @param data 需要加密的数据
+ * @param publicKey 公钥
+ * @return 加密后的数据
+ * @throws Exception 异常信息
+ */
public static String encryptByPublicKeyByWx(String data, String publicKey) throws Exception {
return encryptByPublicKey(data, publicKey, "RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING");
}
@@ -137,10 +143,10 @@ public class RsaKit {
* @param publicKey 公钥
* @param fillMode 填充模式
* @return 加密后的数据
- * @throws Exception
+ * @throws Exception 异常信息
*/
public static String encryptByPublicKey(String data, String publicKey, String fillMode) throws Exception {
- byte[] dataByte = data.getBytes("UTF-8");
+ byte[] dataByte = data.getBytes(StandardCharsets.UTF_8);
byte[] keyBytes = Base64.decode(publicKey);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
@@ -175,7 +181,7 @@ public class RsaKit {
* @param data 需要加密的数据
* @param privateKey 私钥
* @return 加密后的数据
- * @throws Exception
+ * @throws Exception 异常信息
*/
public static String encryptByPrivateKey(String data, String privateKey) throws Exception {
PKCS8EncodedKeySpec priPkcs8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
@@ -184,7 +190,7 @@ public class RsaKit {
java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA");
signature.initSign(priKey);
- signature.update(data.getBytes("UTF-8"));
+ signature.update(data.getBytes(StandardCharsets.UTF_8));
byte[] signed = signature.sign();
return StrUtil.str(Base64.encode(signed));
}
@@ -196,7 +202,7 @@ public class RsaKit {
* @param sign 签名
* @param publicKey 公钥
* @return 验证结果
- * @throws Exception
+ * @throws Exception 异常信息
*/
public static boolean checkByPublicKey(String data, String sign, String publicKey) throws Exception {
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
@@ -204,22 +210,46 @@ public class RsaKit {
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA");
signature.initVerify(pubKey);
- signature.update(data.getBytes("UTF-8"));
- return signature.verify(Base64.decode(sign.getBytes("UTF-8")));
+ signature.update(data.getBytes(StandardCharsets.UTF_8));
+ return signature.verify(Base64.decode(sign.getBytes(StandardCharsets.UTF_8)));
+ }
+
+ /**
+ * 公钥验证签名
+ *
+ * @param data 需要加密的数据
+ * @param sign 签名
+ * @param publicKey 公钥
+ * @return 验证结果
+ * @throws Exception 异常信息
+ */
+ public static boolean checkByPublicKey(String data, String sign, PublicKey publicKey) throws Exception {
+ java.security.Signature signature = java.security.Signature.getInstance("SHA256WithRSA");
+ signature.initVerify(publicKey);
+ signature.update(data.getBytes(StandardCharsets.UTF_8));
+ return signature.verify(Base64.decode(sign.getBytes(StandardCharsets.UTF_8)));
}
/**
* 私钥解密
*
- * @param data
- * @param privateKey
- * @return
- * @throws Exception
+ * @param data 需要解密的数据
+ * @param privateKey 私钥
+ * @return 解密后的数据
+ * @throws Exception 异常信息
*/
public static String decryptByPrivateKey(String data, String privateKey) throws Exception {
return decryptByPrivateKey(data, privateKey, "RSA/ECB/PKCS1Padding");
}
+ /**
+ * 私钥解密
+ *
+ * @param data 需要解密的数据
+ * @param privateKey 私钥
+ * @return 解密后的数据
+ * @throws Exception 异常信息
+ */
public static String decryptByPrivateKeyByWx(String data, String privateKey) throws Exception {
return decryptByPrivateKey(data, privateKey, "RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING");
}
@@ -227,11 +257,11 @@ public class RsaKit {
/**
* 私钥解密
*
- * @param data
- * @param privateKey
+ * @param data 需要解密的数据
+ * @param privateKey 私钥
* @param fillMode 填充模式
- * @return
- * @throws Exception
+ * @return 解密后的数据
+ * @throws Exception 异常信息
*/
public static String decryptByPrivateKey(String data, String privateKey, String fillMode) throws Exception {
byte[] encryptedData = Base64.decode(data);
@@ -263,41 +293,11 @@ public class RsaKit {
return new String(decryptedData);
}
- /**
- * 获取模数和密钥
- *
- * @return
- */
- public static Map getModulusAndKeys() {
-
- Map map = new HashMap(3);
-
- try {
- InputStream in = RsaKit.class.getResourceAsStream("/rsa.properties");
- Properties prop = new Properties();
- prop.load(in);
-
- String modulus = prop.getProperty("modulus");
- String publicKey = prop.getProperty("publicKey");
- String privateKey = prop.getProperty("privateKey");
-
- in.close();
-
- map.put("modulus", modulus);
- map.put("publicKey", publicKey);
- map.put("privateKey", privateKey);
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- return map;
- }
-
/**
* 从字符串中加载公钥
*
* @param publicKeyStr 公钥数据字符串
- * @throws Exception 加载公钥时产生的异常
+ * @throws Exception 异常信息
*/
public static PublicKey loadPublicKey(String publicKeyStr) throws Exception {
try {
@@ -318,9 +318,9 @@ public class RsaKit {
* 从字符串中加载私钥
* 加载时使用的是PKCS8EncodedKeySpec(PKCS#8编码的Key指令)。
*
- * @param privateKeyStr
- * @return
- * @throws Exception
+ * @param privateKeyStr 私钥
+ * @return {@link PrivateKey}
+ * @throws Exception 异常信息
*/
public static PrivateKey loadPrivateKey(String privateKeyStr) throws Exception {
try {