RSA算法加密实现

一、实验目的
学习经典的RSA公钥加密算法的基本原理和特点,能够编写简单的代码实现RSA公钥加密和私钥解密的过程。
二、实验要求
1. 熟悉RSA公私钥加密算法。
2. 掌握如何使用Java BigInteger类,简单实现教科书式的RSA公私钥加密算法。
3. 了解JDK提供的RSA算法的使用。
三、开发环境
JDK 1.7以上,Java开发环境(本实验采用Windows + eclipse作为实验环境),要求参与实验的同学按照对称加密提供的方法,提前安装好JDK。
四、实验内容
【1-1】RSA算法的实现
1、实现RSA公私钥生成算法。
根据教科书可知,RSA的公钥为 ,私钥为 。其中 且 为两个大素数。 且 。因此,可先选取两个大素数,并根据上述关系选取公私钥。相关代码如下:

import java.math.BigInteger;
import java.util.Random;public class RSAInstance {BigInteger n;BigInteger e;BigInteger d;public void initKeys() {// 随机选取两个大素数p,q 长度大致在1024位,置信度1-(1/2)^(500)BigInteger p = new BigInteger(1024, 500, new Random());BigInteger q = new BigInteger(1024, 500, new Random());// 强制要求p q不等,否则会遭受开平方攻击assert(p.compareTo(q) != 0);// 计算n和欧拉函数(n)n = p.multiply(q);BigInteger fin = (p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)));// 随机选取e 同时计算d// 为了保证一定互素,我们直接选一个素数ee = new BigInteger(512, 500, new Random());d = e.modInverse(fin);// 输出结果System.out.println("n : " + n);System.out.println("e : " + e);System.out.println("d : " + d);return;}}

【1-2】RSA算法的完整参考代码

import java.math.BigInteger;
import java.util.Random;public class RSAInstance {BigInteger n;BigInteger e;BigInteger d;public void initKeys() {// 随机选取两个大素数p,q 长度大致在1024位,素数置信度1-(1/2)^(500)BigInteger p = new BigInteger(1024, 500, new Random());BigInteger q = new BigInteger(1024, 500, new Random());// 强制要求p q不等,否则会遭受开平方攻击assert(p.compareTo(q) != 0);// 计算n和欧拉函数(n)n = p.multiply(q);BigInteger fin = (p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE)));// 随机选取e<fin且和fin互素, 同时计算d// 为了保证一定互素,我们直接选一个素数ee = new BigInteger(512, 500, new Random());d = e.modInverse(fin);// 输出结果System.out.println("n : " + n);System.out.println("e : " + e);System.out.println("d : " + d);return;}// 加密算法public BigInteger encrypt(BigInteger m) {return m.modPow(e, n);}// 解密算法public BigInteger decrypt(BigInteger c) {return c.modPow(d, n);}// Main方法,测试RSA对的加密和解密public static void main(String args[]) {// 创建RSA算法实例,生成公私钥对RSAInstance rsa = new RSAInstance();rsa.initKeys();// 加密消息m, 其中m = 12345678 BigInteger m = new BigInteger("12345678");BigInteger c = rsa.encrypt(m);System.out.println("E(12345678)    = " + c);       // 解密System.out.println("D(E(12345678)) = " + rsa.decrypt(c));}}

JAVA RSA算法加密实现 eclipse相关推荐

  1. RSA算法加密Web页面密码提交和验证实测

    理论可以参考百度:关于加密解密过程降解,觉得比较好的:一篇博文 因客户要求把web页面提交/验证改用RSA算法加密密文传递到后台: 1,js/jsp客户端部分RSA加密密码: 2,服务端Java解密: ...

  2. 用RSA算法加密文本文件

    用RSA算法加密文本文件 写文目的 任务说明 代码实现 (1)RSA加密比较小的txt文件 (2)生成1M和1G的txt文件 (3)加密1M的txt文件 调试过程 写文目的 当时参照网上其他文章写的, ...

  3. RSA算法加密解密举例

    RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...

  4. Unity SKFramework框架(二十五)、RSA算法加密、签名工具 RSA Crypto

    目录 简介 函数 1.pem公钥内容转xml 2.pem私钥内容转xml 3.使用公钥对数据进行加密 4.使用私匙对待签名内容进行签名 示例 简介 在调用Java后端接口,需要使用后端提供的pem私钥 ...

  5. java RSA非对称加密详解

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

  6. .NET Core 使用RSA算法 加密/解密/签名/验证签名

    前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...

  7. java rsa padding_rsa加密--选择padding模式需要注意的问题。。。

    最近在做一个项目中需要,在android对一个密码字段首先进行 一次md5加密后再进行一次rsa加密,然后把加密的结果通过 json协议传输给nginx服务器进行解密.在android中,可以直接 使 ...

  8. 安全不安全002:C#实现RSA算法加密解密

    通过前面的文章我们学会了如何生成公钥和私钥,详见这篇文章:https://blog.csdn.net/yysyangyangyangshan/article/details/80368397. 那么, ...

  9. java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)

    本文是自己阅读了网上的高人们的文章之后,实现功能后总结出来的,方便自己方便他人,不喜勿喷 加密解密需要生成公钥.私钥文件步骤 1.打开终端 输入 openssl 5F88AA4A-3913-4CBC- ...

最新文章

  1. Yann LeCun主讲!纽约大学《深度学习》2021课程全部放出,附slides与视频
  2. LeetCode 11盛水最多的容器12整数转罗马数字
  3. Swoole安装make报错 因为php-config配错
  4. mac m1 nvm 安装node版本失败
  5. 永久免费的pdf编辑器
  6. C语言斐波那契数列的非递归实现
  7. 【luogu P3804】【模板】后缀自动机 (SAM)
  8. 负反馈放大电路实验报告
  9. do sb suggest to_suggest_suggest to do 和 suggest doing 的区别
  10. uniapp 微信分享
  11. Eclipse与JDK多版本兼容性设置
  12. FlinkSql系列6之 Interval Join
  13. [转载] 白酒基础知识
  14. Doris报错there is no scanNode Backend
  15. redis进行对比时有对应的key却还是返回false
  16. 《影响力》 -- 人类的心理行为模式
  17. 微型计算机装机顺序,小伙子,听说你要装机?这款机箱够你玩好多年
  18. 嵌入式课程设计linux,嵌入式课程设计报告
  19. win7系统设置电脑自动开机的操作方法
  20. 浙大Python 第4章-9 查询水果价格 (15 分)

热门文章

  1. C/C++ opencv 计算 LBP特征 包括旋转不变 uniform 圆形邻域
  2. APP为什么打开率低?三大原因和应对之策!
  3. Android 悬浮窗的使用(2)
  4. Windows中使用C语言实现打印彩色文字到命令行窗口
  5. jquery入门介绍
  6. 基于matlab菌落影像分割方法,基于MATLAB的图像分割方法及应用-
  7. 2018中国汽车企业排行榜TOP10
  8. 蔡萍:深耕半导体行业二十年,复旦MBA“朋友圈”成智囊团
  9. php判断数组的值是否为空,PHP判断数组(多维数组)值是否为空
  10. 双闭环pid matlab仿真,SPWM波控制单相逆变器双闭环PID调节器的Simulink建模与仿真...