Java非對稱加密,,加密算法可以選擇DES,DESede,Blowfish等,,以張三、李四為例,,介紹加密算法的傳遞,。先產(chǎn)生張三的密鑰對(keyPairZhang),張三生成公鑰(publicKeyZhang)并發(fā)送給李四(公鑰的數(shù)組字節(jié)),,通過網(wǎng)絡(luò)或磁盤等方式,把公鑰編碼傳送給李四,,李四接收到張三編碼后的公鑰,將其解碼,得到KeyFactory對象,將公鑰的KeySpec對象轉(zhuǎn)換為公鑰,,李四用張三的公鑰加密信息,,并發(fā)送給李四,張三用自己的私鑰解密從李四處收到的信息等,,來看一張圖,,或許可以幫助你理解。 以下為JAVA非對稱加密,、解密完整代碼: 01 | import java.security.*; |
02 | import java.security.spec.*; |
04 | public class PairKeyExample { |
05 | public static void main(String argv[]) { |
07 | String algorithm = "RSA" ; //定義加密算法,可用 DES,DESede,Blowfish |
08 | String message = "張三,,你好,我是李四" ; |
09 | //產(chǎn)生張三的密鑰對(keyPairZhang) |
10 | KeyPairGenerator keyGeneratorZhang = |
11 | KeyPairGenerator.getInstance(algorithm); //指定采用的算法 |
12 | keyGeneratorZhang.initialize( 1024 ); //指定密鑰長度為1024位 |
13 | KeyPair keyPairZhang = keyGeneratorZhang.generateKeyPair(); //產(chǎn)生密鑰對 |
14 | System.out.println( "生成張三的公鑰對" ); |
15 | // 張三生成公鑰(publicKeyZhang)并發(fā)送給李四,這里發(fā)送的是公鑰的數(shù)組字節(jié) |
16 | byte [] publicKeyZhangEncode = keyPairZhang.getPublic().getEncoded(); |
17 | //通過網(wǎng)絡(luò)或磁盤等方式,把公鑰編碼傳送給李四 |
19 | KeyFactory keyFacoryLi = KeyFactory.getInstance(algorithm); //得到KeyFactory對象 |
20 | X509EncodedKeySpec x509KeySpec = |
21 | new X509EncodedKeySpec(publicKeyZhangEncode); //公鑰采用X.509編碼 |
22 | PublicKey publicKeyZhang = keyFacoryLi.generatePublic(x509KeySpec); //將公鑰的KeySpec對象轉(zhuǎn)換為公鑰 |
23 | System.out.println( "李四成功解碼,得到張三的公鑰" ); |
24 | //李四用張三的公鑰加密信息,,并發(fā)送給李四 |
25 | Cipher cipher = Cipher.getInstance( "RSA/ECB/PKCS1Padding" ); //得到Cipher對象 |
26 | cipher.init(Cipher.ENCRYPT_MODE, publicKeyZhang); //用張三的公鑰初始化Cipher對象 |
27 | byte [] cipherMessage = cipher.doFinal(message.getBytes()); //得到加密信息 |
28 | System.out.println( "加密后信息:" + new String(cipherMessage)); |
29 | System.out.println( "加密完成,,發(fā)送給李四..." ); |
31 | cipher.init(Cipher.DECRYPT_MODE, keyPairZhang.getPrivate()); //張三用其私鑰初始化Cipher對象 |
32 | byte [] originalMessage = cipher.doFinal(cipherMessage); //得到解密后信息 |
33 | System.out.println( "張三收到信息,解密后為:" + new String(originalMessage)); |
34 | } catch (Exception ex) { |
|