forked from wustrive2008/aes-rsa-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7f042a1
commit b212633
Showing
15 changed files
with
1,993 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,4 @@ | ||
*.class | ||
|
||
# Mobile Tools for Java (J2ME) | ||
.mtj.tmp/ | ||
|
||
# Package Files # | ||
*.jar | ||
*.war | ||
*.ear | ||
|
||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml | ||
hs_err_pid* | ||
.project | ||
.classpath | ||
target/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<groupId>com.wustrive</groupId> | ||
<artifactId>aes-rsa-java</artifactId> | ||
<version>1.0-SNAPSHOT</version> | ||
<packaging>jar</packaging> | ||
|
||
<name>aes-rsa-java</name> | ||
<url>http://maven.apache.org</url> | ||
|
||
<properties> | ||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||
</properties> | ||
|
||
<dependencies> | ||
<dependency> | ||
<groupId>junit</groupId> | ||
<artifactId>junit</artifactId> | ||
<version>3.8.1</version> | ||
<scope>test</scope> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>log4j</groupId> | ||
<artifactId>log4j</artifactId> | ||
<version>1.2.16</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>commons-lang</groupId> | ||
<artifactId>commons-lang</artifactId> | ||
<version>2.5</version> | ||
</dependency> | ||
|
||
<dependency> | ||
<groupId>com.alibaba</groupId> | ||
<artifactId>fastjson</artifactId> | ||
<version>1.1.15</version> | ||
</dependency> | ||
</dependencies> | ||
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
### 测试RSA密钥对 | ||
|
||
#### 客户端私钥 | ||
|
||
##### 原始的私钥: | ||
|
||
``` | ||
MIICXAIBAAKBgQCmzaI2K/Cpaig/8gjne0F7t3uE7Kx3eLM914A2FhGWYGKiI1Q3 | ||
KXJ5c7cKJoIzI/cUsXacgnPORjhmtJb2tXzWaRuil2EtcbhWvRuxUW2gAqAi99U0 | ||
b/LeEzZH0IUO3tku2ZLaslHj1mC5c7vIceY13a4hK0SMdY1itatTXhHdzQIDAQAB | ||
AoGAMLOzm/uCXgS30cvaW7P6L6Qn9WyhApUESJcmQSR6aBymT87e5Og+G0X0+Iq7 | ||
0zC6EJmsFxBjvaN1Dk/GECx3US4rVtQmCi8vJPMnMjaQf9S9rz/pBw85jOj69CL5 | ||
BYJ2yBUJl3kuTQVfsTnZQGM7jxZAsn1EjinZrdxfz23/RIUCQQDaxeVGsZpO6hl3 | ||
0Ve7Qk/n9u3gFrWItof4CXpy65rZHh4O0pIA4mBxKyQ57POb2uHJ4WgMwCNXkiB1 | ||
Wl4dyRl3AkEAwy/Z7O/CzQ6/0LhzfaZng3ZUH4pHgys1vHTHFCKhlV+FkCTKbb4m | ||
bn93DL4JvfoQ01S70nj3U5QPWEgheFTT2wJBAL23ueF5aQigSF+4oi0ZD3Roldar | ||
uteI+xalGZQJLyqzzHssLkMoDVx2fh7hlkyFHyLUH0hXYw6xAQbjzBRmbXcCQFeT | ||
d8csiI3zCTOAHymIaTd99x6zr4R19cVZ7BznsPJRip7zMvRsddfsTyEjf0GDGtuH | ||
UEKOTgJtEzl8G7Be9zMCQB86mimT7BDdPCbp1gzirN2UvvdpmiSJtWBnWH+YqQfP | ||
wZt8BJZybAogHkamCpj6QDJQmecfmQLLgtbI3Kdq+8c= | ||
``` | ||
|
||
##### 转换成PKCS8格式的私钥 | ||
|
||
``` | ||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKbNojYr8KlqKD/y | ||
COd7QXu3e4TsrHd4sz3XgDYWEZZgYqIjVDcpcnlztwomgjMj9xSxdpyCc85GOGa0 | ||
lva1fNZpG6KXYS1xuFa9G7FRbaACoCL31TRv8t4TNkfQhQ7e2S7ZktqyUePWYLlz | ||
u8hx5jXdriErRIx1jWK1q1NeEd3NAgMBAAECgYAws7Ob+4JeBLfRy9pbs/ovpCf1 | ||
bKEClQRIlyZBJHpoHKZPzt7k6D4bRfT4irvTMLoQmawXEGO9o3UOT8YQLHdRLitW | ||
1CYKLy8k8ycyNpB/1L2vP+kHDzmM6Pr0IvkFgnbIFQmXeS5NBV+xOdlAYzuPFkCy | ||
fUSOKdmt3F/Pbf9EhQJBANrF5Uaxmk7qGXfRV7tCT+f27eAWtYi2h/gJenLrmtke | ||
Hg7SkgDiYHErJDns85va4cnhaAzAI1eSIHVaXh3JGXcCQQDDL9ns78LNDr/QuHN9 | ||
pmeDdlQfikeDKzW8dMcUIqGVX4WQJMptviZuf3cMvgm9+hDTVLvSePdTlA9YSCF4 | ||
VNPbAkEAvbe54XlpCKBIX7iiLRkPdGiV1qu614j7FqUZlAkvKrPMeywuQygNXHZ+ | ||
HuGWTIUfItQfSFdjDrEBBuPMFGZtdwJAV5N3xyyIjfMJM4AfKYhpN333HrOvhHX1 | ||
xVnsHOew8lGKnvMy9Gx11+xPISN/QYMa24dQQo5OAm0TOXwbsF73MwJAHzqaKZPs | ||
EN08JunWDOKs3ZS+92maJIm1YGdYf5ipB8/Bm3wElnJsCiAeRqYKmPpAMlCZ5x+Z | ||
AsuC1sjcp2r7xw== | ||
``` | ||
|
||
#### 客户端公钥 | ||
|
||
``` | ||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmzaI2K/Cpaig/8gjne0F7t3uE | ||
7Kx3eLM914A2FhGWYGKiI1Q3KXJ5c7cKJoIzI/cUsXacgnPORjhmtJb2tXzWaRui | ||
l2EtcbhWvRuxUW2gAqAi99U0b/LeEzZH0IUO3tku2ZLaslHj1mC5c7vIceY13a4h | ||
K0SMdY1itatTXhHdzQIDAQAB | ||
``` | ||
|
||
#### 服务器端私钥 | ||
|
||
##### 原始私钥 | ||
|
||
``` | ||
MIICXAIBAAKBgQCyGffCqoC1vCDLeBvjfuHdw4johGvubOpQjEhhPzW1PbLSRKsN | ||
BLgj+eDGOiZE9BwmEwqy16sMOq0kMlhewTQlRrLJNlw3L0iogs9WTIGm3el1SuZL | ||
yMnMksnV0NCsuq538cPMNppZRwARb7NXmpmh0KM79fJ/1xqnpo1tgRcv4wIDAQAB | ||
AoGAMU9xQot0gVyp88u4ZP8/R+gYYtAvFd8/7Lc6XvpiQ2DmvsLWXQ9ecE+BxUBa | ||
UiMIHB6Pir6dlBA22du6jdmONwGWxfSzmpVk0VM2La/MC/DCG4LXsP0EPWBTVnZE | ||
2ejMQiLYw/5ks9y65HKYb27MeFaAlWCCdOK/i6ItLfYNILkCQQDb5KX66tGy1UWF | ||
n2ooI5MeO5q9LayZAe5owA3uvSKrbDP9seXRz6QpQyu/MswFsVNga2Mznd9UCDpt | ||
9ojCL0cVAkEAz1iTzDs3KvCarNTwDOw9IcZ7xd7UiQdAiQkFnRhZCYriGEm61pwl | ||
Re/IyclNgCtR90Q4vQcxjy9md4tkovvZFwJAD5yrQCZd3xGPTw5jbhgggNwAf3/3 | ||
qiFd+Ofx1UpuZLdY9aEkzQGuCRPwzjFgFONjJQxazbZevcubwmTnjsnmhQJATiYn | ||
hplnAKMw2SVk2KoNnHZP3lNPLdpy43NoDz7HCEa1UswvRIYTsllfB1b9A+rP+O9Y | ||
pz5X2ozWBQafxqI/vwJBAInox1/+fFb/PnHFttkTGZssYh3GaU8PYc+7x1Alr9N/ | ||
n8lRrRjISeMbj7fFGmZvdch0j1lmqzPF2u3q6ymlzfQ= | ||
``` | ||
|
||
##### 转换成PKCS8格式的私钥 | ||
|
||
``` | ||
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALIZ98KqgLW8IMt4 | ||
G+N+4d3DiOiEa+5s6lCMSGE/NbU9stJEqw0EuCP54MY6JkT0HCYTCrLXqww6rSQy | ||
WF7BNCVGssk2XDcvSKiCz1ZMgabd6XVK5kvIycySydXQ0Ky6rnfxw8w2mllHABFv | ||
s1eamaHQozv18n/XGqemjW2BFy/jAgMBAAECgYAxT3FCi3SBXKnzy7hk/z9H6Bhi | ||
0C8V3z/stzpe+mJDYOa+wtZdD15wT4HFQFpSIwgcHo+Kvp2UEDbZ27qN2Y43AZbF | ||
9LOalWTRUzYtr8wL8MIbgtew/QQ9YFNWdkTZ6MxCItjD/mSz3Lrkcphvbsx4VoCV | ||
YIJ04r+Loi0t9g0guQJBANvkpfrq0bLVRYWfaigjkx47mr0trJkB7mjADe69Iqts | ||
M/2x5dHPpClDK78yzAWxU2BrYzOd31QIOm32iMIvRxUCQQDPWJPMOzcq8Jqs1PAM | ||
7D0hxnvF3tSJB0CJCQWdGFkJiuIYSbrWnCVF78jJyU2AK1H3RDi9BzGPL2Z3i2Si | ||
+9kXAkAPnKtAJl3fEY9PDmNuGCCA3AB/f/eqIV345/HVSm5kt1j1oSTNAa4JE/DO | ||
MWAU42MlDFrNtl69y5vCZOeOyeaFAkBOJieGmWcAozDZJWTYqg2cdk/eU08t2nLj | ||
c2gPPscIRrVSzC9EhhOyWV8HVv0D6s/471inPlfajNYFBp/Goj+/AkEAiejHX/58 | ||
Vv8+ccW22RMZmyxiHcZpTw9hz7vHUCWv03+fyVGtGMhJ4xuPt8UaZm91yHSPWWar | ||
M8Xa7errKaXN9A== | ||
``` | ||
|
||
#### 服务器端公钥 | ||
|
||
``` | ||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyGffCqoC1vCDLeBvjfuHdw4jo | ||
hGvubOpQjEhhPzW1PbLSRKsNBLgj+eDGOiZE9BwmEwqy16sMOq0kMlhewTQlRrLJ | ||
Nlw3L0iogs9WTIGm3el1SuZLyMnMksnV0NCsuq538cPMNppZRwARb7NXmpmh0KM7 | ||
9fJ/1xqnpo1tgRcv4wIDAQAB | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
package com.wustrive; | ||
|
||
import java.util.TreeMap; | ||
|
||
import com.alibaba.fastjson.JSON; | ||
import com.alibaba.fastjson.JSONObject; | ||
import com.wustrive.aesrsa.util.AES; | ||
import com.wustrive.aesrsa.util.EncryUtil; | ||
import com.wustrive.aesrsa.util.RSA; | ||
import com.wustrive.aesrsa.util.RandomUtil; | ||
|
||
/** | ||
* AES+RSA签名,加密 验签,解密 | ||
* @ClassName: Main | ||
* @Description: TODO(这里用一句话描述这个类的作用) | ||
* @author wustrive | ||
* @date 2015年8月23日 上午1:14:27 | ||
* | ||
*/ | ||
public class Main | ||
{ | ||
public static final String clientPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKbNojYr8KlqKD/y"+ | ||
"COd7QXu3e4TsrHd4sz3XgDYWEZZgYqIjVDcpcnlztwomgjMj9xSxdpyCc85GOGa0"+ | ||
"lva1fNZpG6KXYS1xuFa9G7FRbaACoCL31TRv8t4TNkfQhQ7e2S7ZktqyUePWYLlz"+ | ||
"u8hx5jXdriErRIx1jWK1q1NeEd3NAgMBAAECgYAws7Ob+4JeBLfRy9pbs/ovpCf1"+ | ||
"bKEClQRIlyZBJHpoHKZPzt7k6D4bRfT4irvTMLoQmawXEGO9o3UOT8YQLHdRLitW"+ | ||
"1CYKLy8k8ycyNpB/1L2vP+kHDzmM6Pr0IvkFgnbIFQmXeS5NBV+xOdlAYzuPFkCy"+ | ||
"fUSOKdmt3F/Pbf9EhQJBANrF5Uaxmk7qGXfRV7tCT+f27eAWtYi2h/gJenLrmtke"+ | ||
"Hg7SkgDiYHErJDns85va4cnhaAzAI1eSIHVaXh3JGXcCQQDDL9ns78LNDr/QuHN9"+ | ||
"pmeDdlQfikeDKzW8dMcUIqGVX4WQJMptviZuf3cMvgm9+hDTVLvSePdTlA9YSCF4"+ | ||
"VNPbAkEAvbe54XlpCKBIX7iiLRkPdGiV1qu614j7FqUZlAkvKrPMeywuQygNXHZ+"+ | ||
"HuGWTIUfItQfSFdjDrEBBuPMFGZtdwJAV5N3xyyIjfMJM4AfKYhpN333HrOvhHX1"+ | ||
"xVnsHOew8lGKnvMy9Gx11+xPISN/QYMa24dQQo5OAm0TOXwbsF73MwJAHzqaKZPs"+ | ||
"EN08JunWDOKs3ZS+92maJIm1YGdYf5ipB8/Bm3wElnJsCiAeRqYKmPpAMlCZ5x+Z"+ | ||
"AsuC1sjcp2r7xw=="; | ||
|
||
public static final String clientPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCmzaI2K/Cpaig/8gjne0F7t3uE"+ | ||
"7Kx3eLM914A2FhGWYGKiI1Q3KXJ5c7cKJoIzI/cUsXacgnPORjhmtJb2tXzWaRui"+ | ||
"l2EtcbhWvRuxUW2gAqAi99U0b/LeEzZH0IUO3tku2ZLaslHj1mC5c7vIceY13a4h"+ | ||
"K0SMdY1itatTXhHdzQIDAQAB"; | ||
|
||
public static final String serverPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALIZ98KqgLW8IMt4"+ | ||
"G+N+4d3DiOiEa+5s6lCMSGE/NbU9stJEqw0EuCP54MY6JkT0HCYTCrLXqww6rSQy"+ | ||
"WF7BNCVGssk2XDcvSKiCz1ZMgabd6XVK5kvIycySydXQ0Ky6rnfxw8w2mllHABFv"+ | ||
"s1eamaHQozv18n/XGqemjW2BFy/jAgMBAAECgYAxT3FCi3SBXKnzy7hk/z9H6Bhi"+ | ||
"0C8V3z/stzpe+mJDYOa+wtZdD15wT4HFQFpSIwgcHo+Kvp2UEDbZ27qN2Y43AZbF"+ | ||
"9LOalWTRUzYtr8wL8MIbgtew/QQ9YFNWdkTZ6MxCItjD/mSz3Lrkcphvbsx4VoCV"+ | ||
"YIJ04r+Loi0t9g0guQJBANvkpfrq0bLVRYWfaigjkx47mr0trJkB7mjADe69Iqts"+ | ||
"M/2x5dHPpClDK78yzAWxU2BrYzOd31QIOm32iMIvRxUCQQDPWJPMOzcq8Jqs1PAM"+ | ||
"7D0hxnvF3tSJB0CJCQWdGFkJiuIYSbrWnCVF78jJyU2AK1H3RDi9BzGPL2Z3i2Si"+ | ||
"+9kXAkAPnKtAJl3fEY9PDmNuGCCA3AB/f/eqIV345/HVSm5kt1j1oSTNAa4JE/DO"+ | ||
"MWAU42MlDFrNtl69y5vCZOeOyeaFAkBOJieGmWcAozDZJWTYqg2cdk/eU08t2nLj"+ | ||
"c2gPPscIRrVSzC9EhhOyWV8HVv0D6s/471inPlfajNYFBp/Goj+/AkEAiejHX/58"+ | ||
"Vv8+ccW22RMZmyxiHcZpTw9hz7vHUCWv03+fyVGtGMhJ4xuPt8UaZm91yHSPWWar"+ | ||
"M8Xa7errKaXN9A=="; | ||
public static final String serverPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCyGffCqoC1vCDLeBvjfuHdw4jo"+ | ||
"hGvubOpQjEhhPzW1PbLSRKsNBLgj+eDGOiZE9BwmEwqy16sMOq0kMlhewTQlRrLJ"+ | ||
"Nlw3L0iogs9WTIGm3el1SuZLyMnMksnV0NCsuq538cPMNppZRwARb7NXmpmh0KM7"+ | ||
"9fJ/1xqnpo1tgRcv4wIDAQAB"; | ||
|
||
public static void main(String[] args) throws Exception { | ||
TreeMap<String, Object> params = new TreeMap<String, Object>(); | ||
params.put("userid", "152255855"); | ||
params.put("phone", "18965621420"); | ||
|
||
client(params); | ||
|
||
server(); | ||
} | ||
|
||
public static void client(TreeMap<String, Object> params) throws Exception{ | ||
// 生成RSA签名 | ||
String sign = EncryUtil.handleRSA(params, clientPrivateKey); | ||
params.put("sign", sign); | ||
|
||
String info = JSON.toJSONString(params); | ||
//随机生成AES密钥 | ||
String aesKey = RandomUtil.getRandom(16); | ||
//AES加密数据 | ||
String data = AES.encryptToBase64(info, aesKey); | ||
|
||
// 使用RSA算法将商户自己随机生成的AESkey加密 | ||
String encryptkey = RSA.encrypt(aesKey, serverPublicKey); | ||
|
||
Req.data = data; | ||
Req.encryptkey = encryptkey; | ||
|
||
System.out.println("加密后的请求数据:\n" + new Req().toString()); | ||
} | ||
|
||
public static void server() throws Exception { | ||
|
||
// 验签 | ||
boolean passSign = EncryUtil.checkDecryptAndSign(Req.data, | ||
Req.encryptkey, clientPublicKey, serverPrivateKey); | ||
|
||
if(passSign){ | ||
// 验签通过 | ||
String aeskey = RSA.decrypt(Req.encryptkey, | ||
serverPrivateKey); | ||
String data = AES.decryptFromBase64(Req.data, | ||
aeskey); | ||
|
||
JSONObject jsonObj = JSONObject.parseObject(data); | ||
String userid = jsonObj.getString("userid"); | ||
String phone = jsonObj.getString("phone"); | ||
|
||
System.out.println("解密后的明文:userid:"+userid+" phone:"+phone); | ||
|
||
}else{ | ||
System.out.println("验签失败"); | ||
} | ||
} | ||
|
||
static class Req{ | ||
public static String data; | ||
public static String encryptkey; | ||
|
||
@Override | ||
public String toString() { | ||
return "data:"+data+"\nencryptkey:"+encryptkey; | ||
} | ||
} | ||
} |
Oops, something went wrong.