TA的每日心情 | 怒 2016-6-8 11:09 |
---|
签到天数: 1 天 [LV.1]初学乍练
普通会员
- 积分
- 18
|
发表于 2016-6-8 11:21:44
|
显示全部楼层
import static org.junit.Assert.*; ) l9 U% r) f/ k/ W
8 V8 A2 J9 a! X V! _import org.junit.Before; ( e4 h8 X3 y' i% j9 ^6 d
import org.junit.Test; 5 q" X/ ?7 R& \2 Z8 l3 e
& Z _' R) g1 ]/ ]! m9 |4 D5 Q
import java.util.Map; , d5 d/ _0 l" e
) W9 n* {+ R& U- ?! k8 h
/**
5 j; e4 K# N4 E) w, \9 l& t * 5 V! X' X+ _) d+ g* p) a
* @author 梁栋
+ g5 U/ s) r/ E2 D4 g * @version 1.0
& ?1 `' _* f/ }9 J * @since 1.0 , Q( z x& ?# L: q* \) E2 ?! w
*/
0 B# S8 r: t+ f% Ppublic class RSACoderTest {
' o( \% Z! j$ D' x& U+ m( M private String publicKey; # v' w( V7 @, |$ U/ F8 F: J
private String privateKey;
7 y7 U3 \) s, h( s9 G0 c+ ~1 u
/ e# X% q7 ?! B4 n @Before ) |1 X, y" I: a9 s$ F
public void setUp() throws Exception {
; Q5 `/ t- B4 L: v7 s Map<String, Object> keyMap = RSACoder.initKey();
, }" c( B# R( A, d3 E7 S ! Z& u1 t' {% z, l
publicKey = RSACoder.getPublicKey(keyMap); ~" \: z' f: e: `) J
privateKey = RSACoder.getPrivateKey(keyMap);
t# w( B: l& y System.err.println("公钥: \n\r" + publicKey); & h a+ w* x5 w Y9 m/ v/ D
System.err.println("私钥: \n\r" + privateKey);
8 b D; \' _3 d6 E! {' d }
0 E* v5 ~. }- [1 P ; N' Y" [2 d. F6 b2 K
@Test
_1 D. E: ^) v- M" |5 s5 v! Q% K public void test() throws Exception { 5 B/ X# J; o9 }
System.err.println("公钥加密——私钥解密"); 8 `! P% ]7 Z3 f- I: _& o& ]
String inputStr = "abc";
9 s2 s# w8 t: O$ w8 u8 r byte[] data = inputStr.getBytes();
3 A' i! |/ S% J+ g 4 j* c- i9 F9 }2 v
byte[] encodedData = RSACoder.encryptByPublicKey(data, publicKey); 4 ]+ M; |6 s1 c& r1 M5 f
" |, @$ h2 k9 Q) s6 K. r
byte[] decodedData = RSACoder.decryptByPrivateKey(encodedData, ) a- u8 R6 X: p7 h9 r
privateKey);
7 N- W6 S9 R( \) P, Q7 k5 u . ]" @( ~" w$ {' O, M0 D3 |
String outputStr = new String(decodedData);
- Y) t8 U: H8 v/ q$ C System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr); & o. Z" p, U/ x, Z8 ~# t% k! ^ J% a4 @
assertEquals(inputStr, outputStr); * R8 M% l+ j7 | H' q& Q
* \7 i4 t5 [6 N
}
- }$ b" m, r- A, g" a) {- J# @ , I7 v! r2 `! T/ v
@Test ) q/ }2 }4 P* C+ u4 k% l
public void testSign() throws Exception { 9 r( t. b( o' P. c
System.err.println("私钥加密——公钥解密"); 8 Y% [3 Z! ~8 I8 ?5 |
String inputStr = "sign";
/ s2 T+ j% t5 C! q" P! `7 } t byte[] data = inputStr.getBytes(); & @& t4 f/ I4 B6 Q
& J; T# u; j2 w0 o* D byte[] encodedData = RSACoder.encryptByPrivateKey(data, privateKey);
6 ~7 d0 }* R; M6 l # Z z5 u3 U7 b: y0 @
byte[] decodedData = RSACoder
8 B) @- ^4 l3 x: { .decryptByPublicKey(encodedData, publicKey); 1 J9 A" N' M* Z" B
; {. S4 t* t6 Q8 Z
String outputStr = new String(decodedData); . v$ n( A$ F" G- ?" F
System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);
& Q$ }- o$ p. T' ?9 q0 j! d assertEquals(inputStr, outputStr); 8 w% t2 k2 T2 Z$ y& f
7 d* [8 f& A* x. o
System.err.println("私钥签名——公钥验证签名"); 1 C" C! A. h5 {: b# H
// 产生签名 # h0 h% H& x6 O' n2 t: e7 n9 s
String sign = RSACoder.sign(encodedData, privateKey);
8 y. u4 ?0 ?9 S" t System.err.println("签名:\r" + sign); * W% Y5 q4 q8 J: F; {* g
: @+ H E" _3 G/ T // 验证签名
& j. ? v0 }: Y. }; f: r9 E- v boolean status = RSACoder.verify(encodedData, publicKey, sign); % T/ A1 a) I/ q
System.err.println("状态:\r" + status); ' D% p6 Q# `- [: _' n2 [
assertTrue(status); ! v' e4 [( b& a' J; `" ?/ Q5 M
0 |3 [' p6 ^8 x4 m
}
) o4 K3 c8 A* l& r6 {: ~9 O$ S * X- n# e' q" A6 B. ^" Q3 L( g! S
} |
|