目前为止,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;

    }

    }

Java RSA 生成公钥 私钥的更多相关文章

  1. java RSA 生成公钥私钥

    /** * 引进的包都是Java自带的jar包 * 秘钥相关包 * base64 编解码 * 这里只用到了编码 */ import java.security.Key; import java.sec ...

  2. MAC生成公钥私钥

    前言 需要开发者在本地上使用openssl来生成私钥和公钥 由于mac 自带openssl工具,所以不用像windows那样要下载安装openssl工具 步骤 1.创建一个文件夹,终端进入该文件夹 c ...

  3. Windows下生成 公钥 私钥以及 配置 Filezilla中的 SFTP的私钥

    Win下需要使用到 PuTTYgen.exe来生成公钥私钥,可以参考youtube的这篇文章:  为 SFTP 保管箱生成 Secure Shell (SSH) 密钥对 PuTTYgen.exe的下载 ...

  4. Java中使用OpenSSL生成公钥私钥进行数据加解密

    当前使用的是Linux系统,已经安装OpenSSL软件包. 一.使用OpenSSL来生成私钥和公钥1.执行命令openssl version -a 验证机器上已经安装openssl $ openssl ...

  5. OpenSSL生成公钥私钥***

    证书标准 X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准. 编码格式 同样的X.509证书,可能有不同的编码格式,目前有 ...

  6. openssl生成公钥私钥对 加解密

    在计算机软件开发世界中,编程语言种类极多,数据在各种语言的表现形式可能有所差异,但数据本身的处理可能,或者说本质上是完全一样的:比如数据在某个算法中的运算过程是一样的.在这里,我以加密与解密来作为例子 ...

  7. centos生成公钥私钥 securecrt通过公钥访问服务器 winscp通过公钥访问服务器

    忙碌了一下午,一直到写博客现在.都在纠结阿里云服务器上配置公钥私钥,网上的说辞总是参差不齐,需要各个去综合,合理取舍.今天终于配置好了. 我就不说这种方式的重要性了,往往黑客都不需要你的登陆账户密码就 ...

  8. ssh key一键自动化生成公钥私钥,并自动分发上百服务器免密码交互

    题记:由于工作需要管理大量服务器,所以需要配公钥实现免密登录. ssh批量分发可以一键执行这个操作,但是使用ssh分发服务还需要对各个服务器进行.ssh/id_dsa.pub公钥上传,密码验证.所以需 ...

  9. PHP 生成公钥私钥,加密解密,签名验签

    test_encry.php <?php //创建私钥,公钥 //create_key(); //要加密内容 $str = "test_str"; //加密 $encrypt ...

随机推荐

  1. 【转】C# 根据当前时间获取,本周,本月,本季度等时间段 .Net中Exception

    1 DateTime dt = DateTime.Now; //当前时间 2 3 DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayO ...

  2. c++开发环境搭建

    >>>>>>>>>>>>>>>>>>>>>开发环境搭建<<&l ...

  3. 学习笔记之IKM C++ 11

    https://github.com/haotang923/interview/tree/master/IKM Q1. If most of the calls to function foo() b ...

  4. sublime text 3 3143

    下载链接:https://download.sublimetext.com/Sublime%20Text%20Build%203143%20x64%20Setup.exe 注册信息:sublime t ...

  5. linux下安装jdk7

    查看linux系统是32位还是64位系统:uname --mi686 //表示是32位x86_64 // 表示是64位新建一个jdk的安装目录,我这里是在/usr/local/下新建了java目录,命 ...

  6. python selenium-5根据unittest组织测试用例

    driver:浏览器driver存放地址 testcase:测试用例目录 report:测试结果保存目录 runtest.py:执行文件 test_search1.py搜索selenium,test_ ...

  7. appium 5-27屏幕旋转、

    1.屏幕切换 注意:应用一定要支持横竖屏切换,否则无效果, public void testBrowser() throws InterruptedException { Thread.sleep(1 ...

  8. Linux 期中架构 PHP

    环境 PHP安装前准备  先将需要的软件包如下位置放置.另外需要有WWW用户   参照nginx 满足以上条件后执行安装脚本 PHP安装脚本: #!/bin/bash #install PHP #au ...

  9. 服务端tomcat的简单监控

    由于线上对tomcat监控处于失控的状态(只能通过跳转,简单地jstack/jstat进行监控),故需要针对tomcat快速查看其运行状态   Tomcat-manager   在tomcat/web ...

  10. java单机操作redis3.2.10和集群操作增删改查

    先直接附上单机版的连接和增删改查,7000-7005是端口号 package com.yilian.util; import java.util.HashMap; import java.util.I ...