package passUtil;
/**
* 引進的包都是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();
}
}
}