你的位置:首页 > Java教程

[Java教程]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();    }  }