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

目前为止,RSA是应用最多的公钥加密算法,能够抵抗已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法中,每个通信主体都有两个钥匙,一个公钥(Public Key)用来对数据进行加密; 一个私钥(Private Key)用来对数据进行解密。
下面来看下Java中是如何使用KeyPairGenerator生成keyMap 并从中解析出PublickKey和PrivateKey的。

创建Java工程Keys

  • 01

    打开Eclipse,新建一个Java 工程。 操作:点击“File”-> "New" -> "Java Project"

  • 02

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

    引入所要用到的包

    • 01

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

    编写代码

    • 01

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

    • 02

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

    • 03

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

    完整代码

    • 01

      完整代码: 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; } }

    • 02

      测试结果:

    (0)

    相关推荐

    • java中 RSA算法 如何进行公钥加密私钥解密

      java中对RSA加密算法做了支持.下面是一个小例子: // 生成公私钥对: public class KeyGenerater { private byte[] priKey; private by ...

    • java实现如何生成不重复的随机数

      在开发中常常会遇到要生成随机数,要求不重复并且效率又高,怎么实现呢,自己的一些算法设计分享给大家.以生成8位数的随机值为例: import java.util.Random; public class ...

    • java程序如何生成.exe文件

      一些喜欢研究java的同学这两天问我,java编写的程序如何生成.exe文件呢?尽管已经告诉了他只要生成jar文件就可以在装有java虚拟机上运行了,可以他不甘心,非要整出个.exe文件不可,查了很多 ...

    • java中随机生成随机数及不重复的随机数字

      Java中的随机数是我们经常使用的功能,下面小编通过实例给大家介绍如何生成不重复的随机数. 操作方法 01 先在第一行引入util库,如下图所示,然后实例化Random,接着调用nextInt生成随机 ...

    • Android studio R.java和aidl生成文件位置

      操作方法 01 Android studio的R文件一直是苦苦折腾着广大Android程序员,因为studio创建项目根本看不到R文件,那么,他到底在哪儿呢?通过笔者的文件遍历查找发现,其实并不是没有 ...

    • https原理及tomcat配置https方法

      一. 什么是HTTPS 在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不 ...

    • CentOS双向免密码登录教程

      本文介绍CentOS服务器双向免密码登录:有需要的朋友可以过来看看吧! 原理: (这里两台机器以主机1.主机2表示,这里两台机器是对等的) 若主机1想要免密码登录主机2,需要主机2能够识别自己,这里就 ...

    • Centos6.5 中 ssh免密码登录配置教程

      0.说明 这里为了方便说明问题,假设有A和B两台安装了centos6.5的主机.目标是实现A.B两台主机分别能够通过ssh免密码登录到对方主机.不同主机的配置过程一样,这里介绍A主机的配置过程. 事先 ...

    • CentOS配置SSH单向无密码访问的方法

      最近在研究一款文件系统,需要远程给客户机安装软件,且需要无SSH密码访问,另外需要远程给客户机传文件,每次输入root密码很不方便,就想到用ssh key生成公钥.私钥来验证,而避免每次就必须输入ro ...