1 package com.pff.pff; 2 3 import java.security.KeyFactory; 4 import java.security.KeyPair; 5 import java.security.KeyPairGenerator; 6 import java.security.PrivateKey; 7 import java.security.PublicKey; 8 import java.security.spec.PKCS8EncodedKeySpec; 9 import java.security.spec.X509EncodedKeySpec; 10 11 import javax.crypto.Cipher; 12 13 import org.apache.commons.codec.binary.Hex; 14 15 public class Rsa { 16 private static String test = "pff"; 17 18 public static void main(String[] args) { 19 try { 20 // 生成公私秘钥 21 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 22 KeyPair generateKeyPair = keyPairGenerator.generateKeyPair(); 23 PrivateKey private1 = generateKeyPair.getPrivate(); 24 PublicKey public1 = generateKeyPair.getPublic(); 25 byte[] encoded1 = private1.getEncoded(); 26 byte[] encoded2 = public1.getEncoded(); 27 System.out.println("得到的私钥= " + Hex.encodeHexString(encoded1)); 28 System.out.println("得到的公钥= " + Hex.encodeHexString(encoded2)); 29 // 转换得到私钥 30 PKCS8EncodedKeySpec pKCS8EncodedKeySpec = new PKCS8EncodedKeySpec(encoded1); 31 KeyFactory instance = KeyFactory.getInstance("RSA"); 32 PrivateKey generatePrivate = instance.generatePrivate(pKCS8EncodedKeySpec); 33 // 转换得到公钥 34 X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(encoded2); 35 PublicKey generatePublic = instance.generatePublic(x509EncodedKeySpec); 36 // 私钥加密过程 37 Cipher cipher = Cipher.getInstance("RSA"); 38 cipher.init(Cipher.ENCRYPT_MODE, generatePrivate); 39 byte[] doFinal1 = cipher.doFinal(test.getBytes()); 40 System.out.println("私钥加密结果= " + Hex.encodeHexString(doFinal1)); 41 // 私钥解密过程 42 cipher.init(Cipher.DECRYPT_MODE, generatePublic); 43 byte[] doFinal2 = cipher.doFinal(doFinal1); 44 System.out.println("公钥解密结果= " + new String(doFinal2)); 45 // 公钥加密 46 cipher.init(Cipher.ENCRYPT_MODE, generatePublic); 47 byte[] doFinal3 = cipher.doFinal(test.getBytes()); 48 System.out.println("公钥加密结果= " + Hex.encodeHexString(doFinal3)); 49 // 私钥解密 50 cipher.init(Cipher.DECRYPT_MODE, generatePrivate); 51 byte[] doFinal4 = cipher.doFinal(doFinal3); 52 System.out.println("公钥解密结果= " + new String(doFinal4)); 53 } catch (Exception e) { 54 e.printStackTrace(); 55 } 56 57 } 58 59 }