TA的每日心情 | 怒 2016-6-8 11:09 |
---|
签到天数: 1 天 [LV.1]初学乍练
普通会员

- 积分
- 18
|
发表于 2016-6-8 11:21:44
|
显示全部楼层
import static org.junit.Assert.*;
$ z, v0 @. o( z$ w2 E' p ' d) M4 v1 K! `, ]7 ^& w( t
import org.junit.Before; 8 }+ T9 j) B, n6 l5 l2 \ |# a
import org.junit.Test;
( ?$ Y+ E( v/ T ! o! D4 ]* M$ L) n
import java.util.Map; " B4 a6 b1 m8 G% r+ }
/ t5 z$ y, U0 W' g0 L
/**
2 z' ~1 l8 Q. I * . J7 i3 I; T2 Y8 Y6 i/ G" f' {
* @author 梁栋 : @( j' {$ [" L. ?: \) ?
* @version 1.0
- N+ U9 p; p; I * @since 1.0 y3 L$ r3 t4 Z; k2 G' K% _
*/ # M5 B U6 a$ G, F6 n6 e( q0 B
public class RSACoderTest {
! V9 i% w8 {/ [9 J& Y) g private String publicKey;
6 d) [) k5 e- q' f# ]! e% s- u private String privateKey;
; M. @ a, o; R# z' P 6 V: ~" `% P6 n3 l Z; F+ i* f; f
@Before ( t" Y+ A4 E& [ Q' b+ b$ E
public void setUp() throws Exception {
9 `& y$ F3 B1 X" X5 w Map<String, Object> keyMap = RSACoder.initKey(); 9 w" L1 y+ `0 {: y! l. j, e; m* v
: R$ \2 U4 g* c \
publicKey = RSACoder.getPublicKey(keyMap);
' T- Y% A, ]. K/ s2 W" q" S privateKey = RSACoder.getPrivateKey(keyMap);
$ U, h7 `/ B; a# }$ P) p# b System.err.println("公钥: \n\r" + publicKey);
2 S! B/ b& w& E9 e) i System.err.println("私钥: \n\r" + privateKey); ! p# _' s( ]3 z9 D% ^2 S3 R- Z6 }
}
1 S0 h$ L* b& y: O3 R) Q$ |$ A5 N 1 r3 O* F5 B6 W; v2 t
@Test 2 o [8 k2 V! z& j' p3 Q
public void test() throws Exception { 3 w: u3 u9 c# r$ _1 ?# `. }6 F. U7 t
System.err.println("公钥加密——私钥解密"); : |, D z$ Q: j a
String inputStr = "abc";
, H- c3 r8 B' c; @1 a3 C; F byte[] data = inputStr.getBytes(); 5 ^# s' a! x$ @% {7 [
0 N) \6 M8 P" i3 z byte[] encodedData = RSACoder.encryptByPublicKey(data, publicKey); 3 [1 _. H+ l- U$ N9 _* F B
$ `+ Q; c2 ~+ m
byte[] decodedData = RSACoder.decryptByPrivateKey(encodedData, 0 r0 S, `+ {' J% a
privateKey); $ x; w) Z: n, ]; L/ D
' a7 R2 a2 V4 p' X String outputStr = new String(decodedData);
- ~7 q: a# f. E$ L: t0 V; T& Z2 N System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);
. I. q$ i& x( V. O assertEquals(inputStr, outputStr); . S) ^ n3 A; I& T* r; N) K6 o; d
h4 b2 Z/ j$ D } ! P' j5 P0 F" g4 J' o
% X3 M% V1 V, \3 Y7 \
@Test
# K$ ~" Q. i* h0 Z) _! M2 h# ~ public void testSign() throws Exception { ; N! N8 m0 { |8 a
System.err.println("私钥加密——公钥解密"); C7 c7 i) H9 w7 D4 a
String inputStr = "sign";
$ p- ^9 v6 A# k$ l( w! R, A' e byte[] data = inputStr.getBytes(); 3 s( J8 `$ g; U3 i1 x
! a2 ]$ e0 g2 ~/ R% ^* \
byte[] encodedData = RSACoder.encryptByPrivateKey(data, privateKey);
2 y; _. r5 I" a , q9 ~: I; o* U: N9 f( n
byte[] decodedData = RSACoder 0 D* ^. [* f3 e. [' f5 H
.decryptByPublicKey(encodedData, publicKey); * D) z( K0 M* } r
+ @7 z+ ^, j0 d( {7 v/ L String outputStr = new String(decodedData);
$ g3 n4 c/ k" p System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); 3 `1 m# l* d6 @8 j. B0 y, f0 ]' Q
assertEquals(inputStr, outputStr);
/ E8 ~' Q8 B# P: b
& u$ Y6 H; m7 S3 B; | System.err.println("私钥签名——公钥验证签名");
5 t. o, j+ n+ v9 H. K _, z // 产生签名 : z6 B% a: F9 f
String sign = RSACoder.sign(encodedData, privateKey); 3 p" G* t# g0 o
System.err.println("签名:\r" + sign);
1 X# M) w& O9 F2 Q' t, C
) I) G2 j; y# v# @, O // 验证签名
. v6 A& {5 I u3 r v# x3 g4 I boolean status = RSACoder.verify(encodedData, publicKey, sign); & r( V6 R3 Y2 g" }/ d4 ^% G0 o+ P7 V1 a
System.err.println("状态:\r" + status);
3 C# Z& t6 F3 S- p$ C5 s! p) x7 L8 L5 b assertTrue(status);
3 n+ i+ `# k' O" x
# Q5 A q. I6 T% q. O1 Q0 { } ) R! e3 ]) h3 C7 P: b9 e$ ]
. |2 ?' [* d6 l9 ~1 ?9 `0 m
} |
|