Java RSA 生成公鑰 私鑰


目前為止,RSA是應用最多的公鑰加密算法,能夠抵抗已知的絕大多數密碼攻擊,已被ISO推薦為公鑰數據加密標准。

 

RSA算法中,每個通信主體都有兩個鑰匙,一個公鑰(Public Key)用來對數據進行加密; 一個私鑰(Private Key)用來對數據進行解密。 

 

下面來看下Java中是如何使用KeyPairGenerator生成keyMap 並從中解析出PublickKey和PrivateKey的。

 

  1.  
  2. 完整代碼:

    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;

     

    @SuppressWarnings("unused")

    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 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();

    }  

    }

     

    public static String getPublicKey(Map<String, Object> keyMap) throws Exception {

             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 {

             Key key = (Key) keyMap.get(PRIVATE_KEY); 

             byte[] privateKey =key.getEncoded(); 

    return encryptBASE64(key.getEncoded());

    }  

               

        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);               

        }       

        

    public static Map<String, Object> initKey() throws Exception {

    KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);

    keyPairGen.initialize(1024);

    KeyPair keyPair = keyPairGen.generateKeyPair();

     

    RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

    RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

     

    Map<String, Object> keyMap = new HashMap<String, Object>(2);

    keyMap.put(PUBLIC_KEY, publicKey);

    keyMap.put(PRIVATE_KEY, privateKey);

     

    return keyMap;

    }

    }

     

  3. 2
    Java RSA加密算法生成公鑰和私鑰
  4.  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM