Java RSA加密算法生成公钥和私钥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java RSA加密算法生成公钥和私钥相关的知识,希望对你有一定的参考价值。

原文:http://jingyan.baidu.com/article/6dad5075f33466a123e36ecb.html?qq-pf-to=pcqq.c2c

 

目前为止,RSA是应用最多的公钥加密算法,能够抵抗已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。

 

RSA算法中,每个通信主体都有两个钥匙,一个公钥(Public Key)用来对数据进行加密; 一个私钥(Private Key)用来对数据进行解密。 

 

下面来看下Java中是如何使用KeyPairGenerator生成keyMap 并从中解析出PublickKey和PrivateKey的。

工具/原料

 
  • Eclipse

创建Java工程Keys

 
  1. 1

    打开Eclipse,新建一个Java 工程。

    操作:点击“File”-> "New" -> "Java Project"

    技术分享
  2. 2

    工程名内输入Keys, 然后点击“Finish”即可

    技术分享
    END

引入所要用到的包

 
  1. 1

    若要使用RSA加密,需要在代码中引入java.security子包, 和Base64加密、解密包。具体如下:

    技术分享
    END

编写代码

 
  1. 1

    编写生成key map寒暑 initKey, 如图:

    技术分享
  2. 2

    编写获取公钥函数及辅助Base64解码函数如图:

    技术分享
  3. 3

    主函数(main 函数)中编写测试代码如图:

    技术分享
    END

完整代码

 
  1. 1

    完整代码:

    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;

    }

    }

     

  2. 2

    测试结果:

    技术分享
  3.  

以上是关于Java RSA加密算法生成公钥和私钥的主要内容,如果未能解决你的问题,请参考以下文章

iOS RSA加密生成公钥私钥

公钥算法原理

Java中使用RSA算法加密

RSA的公钥、私钥

关于RSA中公钥和私钥的具体使用情况区分

什么是RSA算法,有公钥和私钥对?他的处理过程是这样的?