RSA适用场景:

1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
2)甲方获取乙方的公钥,然后用它对信息加密。
3)乙方得到加密后的信息,用私钥解密。

参考代码如下:

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 javax.crypto.Cipher;public class RSAAsymmetricEncryption {/*** 公钥加密,私钥解密(非对称加密)* */public static void main(String[] args) throws Exception {//公钥加密String express="abc";publicEnrypy(express);      //私钥解密privateEncode();}/*** 加密的方法,使用公钥进行加密* @throws Exception*/public static void publicEnrypy(String express) throws Exception {Cipher cipher = Cipher.getInstance("RSA");KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");       KeyPair keyPair = keyPairGenerator.generateKeyPair();// 生成钥匙对       Key publicKey = keyPair.getPublic();// 得到公钥      Key privateKey = keyPair.getPrivate();// 得到私钥    saveKey(privateKey);//把私钥保存到硬盘上 cipher.init(Cipher.ENCRYPT_MODE, publicKey);// 设置为加密模式      byte[] result = cipher.doFinal(express.getBytes());// 对数据进行加密  saveData(result);//把加密后的数据保存到硬盘上      System.out.println(result.toString());//显示密文}/*** 解密的方法,使用私钥进行解密* @throws Exception*/public static void privateEncode() throws Exception {Cipher cipher = Cipher.getInstance("RSA");     Key privateKey = loadKey();// 从硬盘中读取私钥    cipher.init(Cipher.DECRYPT_MODE, privateKey);//设置为解密模式,用私钥解密    byte[] data = loadData();// 从硬盘中读取加密后的数据        byte[] result = cipher.doFinal(data);//对加密后的数据进行解密,返回解密后的结果System.out.println( new String(result) );//显示明文}/*** 从硬盘中加载加密后的文件* @return* @throws FileNotFoundException* @throws IOException*/private static byte[] loadData() throws FileNotFoundException, IOException {FileInputStream fileInputStream = new FileInputStream(new File("D:\\tmp\\rsa.dat"));ByteArrayOutputStream outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = fileInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, len);}fileInputStream.close();return outputStream.toByteArray();}/*** 把加密后的密文保存到硬盘上* @param result* @throws FileNotFoundException* @throws IOException*/private static void saveData(byte[] result) throws FileNotFoundException, IOException {FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\tmp\\rsa.dat"));fileOutputStream.write(result);}/*** 从硬盘中加载私钥* @return* @throws IOException* @throws FileNotFoundException* @throws ClassNotFoundException*/private static Key loadKey() throws IOException, FileNotFoundException, ClassNotFoundException {ObjectInputStream inputStream = new ObjectInputStream( new FileInputStream(new File("D:\\tmp\\rsa_prikey.dat")));Key privateKey = (Key) inputStream.readObject();return privateKey;}/*** 把私钥保存到硬盘上* @param privateKey* @throws IOException* @throws FileNotFoundException*/private static void saveKey(Key privateKey) throws IOException, FileNotFoundException {ObjectOutputStream outputStream = new ObjectOutputStream( new FileOutputStream(new File("D:\\tmp\\rsa_prikey.dat")));outputStream.writeObject(privateKey);}
}

RSA非对称加密算法Java实现相关推荐

  1. RSA非对称加密算法Java实现之输出key文件

    场景:Java实现RSA,将公钥和秘钥分别输出文件,公钥用于加密,私钥用于解密. 重点要关注解密时,不能直接传String,要用byte[],所以需要加二者转换函数. 参考代码如下: package ...

  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. Tensorflow—继续优化,使MNIST准确率98%以上
  2. CSS Sprites (转)
  3. Leading and Trailing(数论题)
  4. POJ1088 滑雪 记忆化搜索
  5. 学什么就业前景好的专业_新能源汽车专业学什么?其就业前景如何?
  6. 【OSChina-MoPaaS应用开发大赛】豪美创新后台业务管理系统
  7. C和C指针小记(五)-指针类型
  8. dell 7447加装SSD
  9. nbu备份脚本 linux,netbackup备份教程详解
  10. 测试中正交表软件,用正交表工具PICT自动设计测试用例
  11. FFmpeg学习教程
  12. 最新带后台收录的娱乐导航网网站源码
  13. win10创建局域网服务器
  14. 工程师分享——SMT贴片机编程的主要流程 2021-08-11
  15. 【Linux】Infiniband 驱动安装---(HCA光钎)---mlnx
  16. 小米手机play商店无法下载
  17. 数据库之Mysql索引、事务与存储引擎
  18. 病毒木马入侵招数专题
  19. STM32的内部参照电压VREFINT(1.2V)和ADC参考电压Vref+如何区分呢
  20. linux如何设置串口参数,串口通信的参数如何设置

热门文章

  1. 通过PXE服务器批量安装系统
  2. Java编程思想 第十三章:字符串
  3. c++求矩阵的秩_一篇文章搞定矩阵相关概念及意义通俗解释汇总
  4. Linux操作系统安装LAMP环境
  5. Nginx的安装和多域名配置的实现方法
  6. 【剑指Offer】16重建二叉树
  7. python自动化测试-D8-学习笔记之一(面向对象编程)
  8. HTML知识点梳理1
  9. 3. JavaScript 数据类型
  10. node-webkit中使用sqlite3