• 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加密算法生成公钥和私钥
  • 相关阅读:
    WinForm界面开发之布局控件"WeifenLuo.WinFormsUI.Docking"的使用
    分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。
    小议主子表INT自增主键插入记录的方法SQL server]教程
    微软工程师主讲的SqlServer2005视频教程
    11 个重要的数据库设计规则
    sql数据库设计学习---数据库设计规范化的五个要求
    YY淘宝商品数据库设计
    ASP.NET MVC的客户端验证:jQuery的验证
    ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
    UNIX标准化及实现之POSIX标准可选头文件
  • 原文地址:https://www.cnblogs.com/shihaiming/p/5972021.html
Copyright © 2020-2023  润新知