原文: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

    测试结果:

Java RSA加密算法生成公钥和私钥的更多相关文章

  1. git 生成公钥、私钥方法与clone使用方法

    我的配置流程 Git配置 Git安装完之后,需做git配置.打开git bash,分别执行以下两句命令 git config --global user.name "用户名" gi ...

  2. Git简单生成生成公钥和私钥方法

    Git简单生成生成公钥和私钥方法 Git配置 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” g ...

  3. GIT生成公钥和私钥

    转载至:https://blog.csdn.net/gwz1196281550/article/details/80268200 打开 git bash! git config --global us ...

  4. Git安装与使用(windows环境)(一)----Git安装、生成公钥和私钥、添加SSH

    安装 1.从官网下载git:http://git-scm.com/downloads 2.安装git,选择git组件安装,如下图 3.一直next,直到出现下面的窗口.这里是选择命令行形式.(可以理解 ...

  5. 使用keytool生成公钥、私钥、证书并且读取出来,使用私钥签名jar并验证(转)

    参考链接:http://happyqing.iteye.com/blog/2139504 :https://blog.csdn.net/arjelarxfc/article/details/52461 ...

  6. java RSA加密算法

    [转]RSA加密算法   RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前 ...

  7. openssl pem 生成公钥和私钥及文件

    openssl pem.h 中提供了关于pem格式密钥对的操作接口 通常使用.pem的格式文件来保存openssl 生成的密钥对: 在终端下 cat xxx.pem 可以看到 p.p1 { margi ...

  8. 【转】iOS安全之RSA加密/生成公钥、秘钥 pem文件

    在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...

  9. Java RSA 密钥生成工具

    MAC openssl: RSA加解密 第一条命令是生成密钥长度为1024的密钥: 第二条命令是从中生成公钥: 第三条命令是使用pkcs8编码密钥为私钥 http://blog.csdn.net/ch ...

随机推荐

  1. xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance(xsi:schemaLocation详解)

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"中xsi的意思是 :本xml文件中要用到某些来自xsi代表的“http:/ ...

  2. 【bzoj3545】peaks

    离线一下,动态开点+线段树合并,然后权值线段树上询问kth即可. #include<bits/stdc++.h> ; *; using namespace std; ; inline in ...

  3. HEER-Easing Embedding Learning by Comprehensive Transcription of Heterogeneous Information Networks

    来源:KDD 2018 原文:HEER code:https://github.com/GentleZhu/HEER 注: 若有错误,欢迎指正   这篇KDD’18的文章,没有按照常规的方法将所有的n ...

  4. 关于大O法的几点解释

    大O表示法指出算法有多快.例如,假设列表包含n个元素.简单查找需要检查每个元素,因此需要执行n次操作.使用大O表示法,这个运行时间为O(n).主要单位不是秒啊,大O表示法值得并非以秒为单位的速度,而是 ...

  5. 转载---HttpUrlConnection发送post请求汉字出现乱码的一个解决方法及其原因

    原文:http://blog.csdn.net/qqaazz211/article/details/52136187 在网上看到了这篇比较简单的解决方法,果然有用,特记之 解决方法是:将 out.wr ...

  6. hdu 4496(并查集逆向添边)

    D-City Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Subm ...

  7. Restore IP Addresses——边界条件判定

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  8. WordPress固定链接设置的几种方法(推荐/%post_id%.html)

    传说中,固定链接有SEO功能,今天试了试,现在给大家分享一下: wordpress固定链接设置技巧: 1.不要让日期出现在固定链接里面 这基于两个方面的考虑.一是如果数字出现在固定链接里面,等于提醒搜 ...

  9. AC日记——围栏木桩 洛谷 P2362

    围栏木桩 思路: DP: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 2001 int n,m,ai[ma ...

  10. vue实现简单在线聊天

    vue实现简单在线聊天 引用mui的ui库,ES6的 fetch做网络请求 //html <!DOCTYPE html> <html> <head> <met ...