zoukankan      html  css  js  c++  java
  • 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"

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

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

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

    引入所要用到的包

     
    1. 1

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

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

    编写代码

     
    1. 1

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

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

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

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

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

      Java RSA加密算法生成公钥和私钥
      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

      测试结果:

      Java RSA加密算法生成公钥和私钥
  • 相关阅读:
    php设计模式-适配器
    遍历Map的4种方法
    遍历数组
    遍历List的方法
    复选框选中
    单选框选中
    正向代理和反向代理
    对于Dubbo的理解
    python远程控制Linux
    python对中文的处理
  • 原文地址:https://www.cnblogs.com/shihaiming/p/5972021.html
Copyright © 2011-2022 走看看