1. 程式人生 > >java RSA 生成公鑰私鑰

java RSA 生成公鑰私鑰

/**
 * 引進的包都是Java自帶的jar包
 * 祕鑰相關包
 * base64 編解碼
 * 這裡只用到了編碼
 */
import java.security.Key;
import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.util.HashMap; import java.util.Map; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; public class CreateSecrteKey { public class Keys { } public static final String KEY_ALGORITHM = "RSA"; //public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; private static final String PUBLIC_KEY = "RSAPublicKey"; private static final String PRIVATE_KEY = "RSAPrivateKey"; //獲得公鑰 public static String getPublicKey(Map<String, Object> keyMap) throws Exception { //獲得map中的公鑰物件 轉為key物件 Key key = (Key) keyMap.get(PUBLIC_KEY); //byte[] publicKey = key.getEncoded(); //編碼返回字串 return encryptBASE64(key.getEncoded()); } //獲得私鑰 public static String getPrivateKey(Map<String, Object> keyMap) throws Exception { //獲得map中的私鑰物件 轉為key物件 Key key = (Key) keyMap.get(PRIVATE_KEY); //byte[] privateKey = key.getEncoded(); //編碼返回字串 return encryptBASE64(key.getEncoded()); } //解碼返回byte public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } //編碼返回字串 public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } //map物件中存放公私鑰 public static Map<String, Object> initKey() throws Exception { //獲得物件 KeyPairGenerator 引數 RSA 1024個位元組 KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); keyPairGen.initialize(1024); //通過物件 KeyPairGenerator 獲取物件KeyPair KeyPair keyPair = keyPairGen.generateKeyPair(); //通過物件 KeyPair 獲取RSA公私鑰物件RSAPublicKey RSAPrivateKey RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); //公私鑰物件存入map中 Map<String, Object> keyMap = new HashMap<String, Object>(2); keyMap.put(PUBLIC_KEY, publicKey); keyMap.put(PRIVATE_KEY, privateKey); return keyMap; } public static void main(String[] args) { Map<String, Object> keyMap; try { keyMap = initKey(); String publicKey = getPublicKey(keyMap); System.out.println(publicKey); String privateKey = getPrivateKey(keyMap); System.out.println(privateKey); } catch (Exception e) { e.printStackTrace(); } }