场景:Java实现RSA,将公钥和秘钥分别输出文件,公钥用于加密,私钥用于解密。

重点要关注解密时,不能直接传String,要用byte[],所以需要加二者转换函数。

参考代码如下:

package sk.ml;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.security.Key;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;import javax.crypto.Cipher;
import javax.crypto.NoSuchPaddingException;public class RSAAsymmetricEncryption {/*** 公钥加密,私钥解密(非对称加密)* */public static void main(String[] args) throws Exception {//生成公钥文件和秘钥文件并保存generateKey();//导入公钥加密String express="13366668888";byte[] cipherText=publicEnrypy(express);String strCiphertext=byteToString(cipherText);//密文byte[]转化成stringSystem.out.println(strCiphertext);//导入私钥解密byte[] getcipherText=stringToByte(strCiphertext);//密文string转化成byte[]byte[] retExpress=privateEncode(getcipherText);System.out.println(new String(retExpress));}//生成公钥和秘钥public static void generateKey() throws Exception{KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");       KeyPair keyPair = keyPairGenerator.generateKeyPair();// 生成钥匙对       Key publicKey = keyPair.getPublic();// 得到公钥         String puckeyFile="D:\\tmp\\rsa_pubkey.dat";saveKey(publicKey,puckeyFile);//保存公钥Key privateKey = keyPair.getPrivate();// 得到私钥    String prikeyFile="D:\\tmp\\rsa_prikey.dat";saveKey(privateKey,prikeyFile);//把私钥保存到硬盘上 }//保存公钥和秘钥private static void saveKey(Key rsaKey,String filename) throws Exception{ObjectOutputStream outputStream = new ObjectOutputStream( new FileOutputStream(new File(filename)));outputStream.writeObject(rsaKey);}//导出公钥和秘钥private static Key loadKey(String filename) throws Exception {ObjectInputStream inputStream = new ObjectInputStream( new FileInputStream(new File(filename)));Key rsaKey = (Key) inputStream.readObject();return rsaKey;}/*** 加密的方法,使用公钥进行加密* @throws Exception*/public static byte[] publicEnrypy(String express) throws Exception {Cipher cipher = Cipher.getInstance("RSA");String puckeyFile="D:\\tmp\\rsa_pubkey.dat";Key pubkey=loadKey(puckeyFile);cipher.init(Cipher.ENCRYPT_MODE, pubkey);// 设置为加密模式      byte[] result = cipher.doFinal(express.getBytes());// 对数据进行加密  return result;//返回密文}/*** 解密的方法,使用私钥进行解密* @throws Exception*/public static byte[] privateEncode(byte[] cipherText) throws Exception {Cipher cipher = Cipher.getInstance("RSA"); String prikeyFile="D:\\tmp\\rsa_prikey.dat";Key prikey = loadKey(prikeyFile);// 从硬盘中读取私钥    cipher.init(Cipher.DECRYPT_MODE, prikey);//设置为解密模式,用私钥解密   byte[] result = cipher.doFinal(cipherText);//对加密后的数据进行解密return result ;//返回明文 }//  把byte[]元素之间添加空格,并转化成字符串返回,  public static String byteToString(byte[] resouce){StringBuffer sb = new StringBuffer(); for (int i = 0; i < resouce.length; i++) { if (i == resouce.length-1) { sb.append(Byte.toString(resouce[i]));}else{  sb.append(Byte.toString(resouce[i]));sb.append(" ");  }  } return sb.toString();  } //  把字符串按照空格进行拆分成数组,然后转化成byte[],返回  public static byte[] stringToByte(String resouce){  String[] strArr = resouce.split(" ");int len = strArr.length;byte[] clone = new byte[len];for (int i = 0; i < len; i++) { clone[i] = Byte.parseByte(strArr[i]);}  return clone;        }
}

RSA非对称加密算法Java实现之输出key文件相关推荐

  1. RSA非对称加密算法Java实现

    RSA适用场景: 1)乙方生成两把密钥(公钥和私钥).公钥是公开的,任何人都可以获得,私钥则是保密的. 2)甲方获取乙方的公钥,然后用它对信息加密. 3)乙方得到加密后的信息,用私钥解密. 参考代码如 ...

  2. python能解密java的_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  3. java python rsa加密_实现Java加密,Python解密的RSA非对称加密算法功能

    摘要 因为最近业务需要使用到openssl的rsa非对称加密算法,研究了下它的使用方式,但是特殊在于前端分IOS和android两端,所以前端部门要求使用java给他们做一个加密工具包,但是因为服务端 ...

  4. Java 实现 RSA 非对称加密算法-加解密和签名验签

    1. 非对称加密算法简介 非对称加密算法又称现代加密算法,是计算机通信安全的基石,保证了加密数据不会被破解.与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密(pr ...

  5. 非对称加密算法 - Java加密与安全

    非对称加密算法我们从DH算法中可以看到密钥对是一种非常有用的加密算法 密钥对中publicKey是可以公开的,而privateKey则是需要保密的,由此奠定了非对称加密的基础 非对称加密就是加密和解密 ...

  6. RSA - 非对称加密算法简要介绍与JAVA实现

    [1]RSA简介 RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年 ...

  7. .NET Core加解密实战系列之——RSA非对称加密算法

    简介 加解密现状,编写此项目的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java) 网上资料版本不一.不全面 .NET官方库密码算法提供不全面,很难针对其 ...

  8. RSA 非对称加密算法简述

    RSA概述 首先看这个加密算法的命名.很有意思,它其实是三个人的名字.早在1977年由麻省理工学院的三位数学家Rivest.Shamir 和 Adleman一起提出了这个加密算法,并且用他们三个人姓氏 ...

  9. 加密授权验证学习之五——RSA非对称加密算法将机器码加密为注册码

    RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用.我们这里使用RSA加密算法,主要用到openssl库,openssl是可以很方便加密解密的库,可以使用它来对需要在网络中 ...

最新文章

  1. php制作标记图,PHP使用JPGRAPH制作圆柱图的方法详解
  2. 下次迟到的借口有了!牛津大学发现时钟越准确,产生的熵越高
  3. IIS 500错误,一步帮你搞定.
  4. 路由器中虚拟服务器设置,路由器中虚拟服务器设置方法
  5. javaee概览_Java 9概览
  6. 概率论与数理统计思维导图知识框架_考研概率论与数理统计 综合题型秘籍思维导图① 随机变量1~3章 [21考研上岸之旅]...
  7. bootstrap登录表单
  8. python下载哪个版本好-python下载哪个版本好
  9. C++-Qt【1】-退出程序静态调试
  10. 华为机试题202205
  11. DDS文档数据库服务
  12. Maven安装与Maven HelloWorld入门实例
  13. JAVAweb开发技术-------(七)POI导入导出excel技术
  14. a-btest 数据挖掘_挖掘新的垂直鼠标-帮助我的腕管
  15. mysql 评论回复表设计_数据库设计——评论回复功能
  16. 游戏公司盯上了区块链:是机会,还只是一场游戏?
  17. 信息系统安全开发注意事项(一)
  18. 第十一周学习周报(20180514-20180520)
  19. Win10下媲美apt的包管理工具 Scoop 的安装以及常用软件清单
  20. 全景拼接python旗舰版

热门文章

  1. 下qemu模拟arm9_QEMU搭建树莓派环境
  2. 调用 标签打印软件_标签打印软件如何制作陶瓷标签模板
  3. lvs+keepalived实现双实例【双主模型】
  4. 如何消除运动后肌肉酸痛 (DOMS - Delayed Onset Muscle Soreness)
  5. T1330 最少步数(#Ⅱ- 8)(广度优先搜索)
  6. (第六场)Singing Contest 【模拟】
  7. python 之CORS,VUE+rest_framework示例
  8. 第二阶段团队每日冲刺07
  9. 2.5-冗余VLAN
  10. ZH奶酪:Python按行读取文件