一、RSA算法

1.密钥生成

  • 随机生成两个大素数p、q
  • 计算n=p*q
  • 计算n的欧拉函数f=(p-1)*(q-1)
  • 选取1<e<f,使e与f互素
  • 计算d,ed=1modf
  • 公钥为(e,n),私钥为(d,n)

2.加密

  • c=m^e mod n

3.解密

  • m=c^e mod n

二、BigInteger类(大数)

  • 定义:
BigInteger b=new BigInteger("1");
  • 将其他类型变量转化为BigInteger变量
BigInteger b=BigInteger.valueof(1);
  • 随机生成大素数
BigInteger bigInteger = BigInteger.probablePrime(2048, r);    //随机生成2048位的大素数,r为Random变量
  • 素性检验(米勒罗宾检验)
boolean a = b.isProbablePrime(256);    //b是素数的概率为1 - 1 / 2^256
  • 四则运算
BigInteger a,b,c;
c=a.add(b); //加
c=a.subtract(b); //减
c=a.multiply(b); //乘
c=a.divide(b); //除
  • 最大公因子
BigInteger a,b,c;
c=a.gcd(b);
  • 取余
BigInteger a,b,c;
c=a.remainder(b);
  • 次方模(a^b mod m)
BigInteger a,b,c;
c=a.modPow(b,m);

三、算法实现

1.两个大素数的生成

  • 构建Big类,随机生成大素数,并进行素性检验

2.公钥生成

  • 寻找与f互素的公钥e(1<e<f)

3.私钥生成

  • 利用欧几里得算法(辗转相除法),列表,计算e模f的逆d

4.获取密钥

  • 在Keys类中将公钥、私钥输出到文件

5.加密

(1)从文件逐行读取明文、公钥

(2)使用getByte()将明文转化为byte数组

(3)依次计算c=m^e mod n

(4)将结果逐行输出到文件

6.解密

(1)从文件逐行读取密文、私钥

(2)读入密文的同时计算m=c^d mod n,并将其存入byte数组

(3)将byte数组还原为字符串(明文)

(4)输出明文到文件

四、遇到的问题和解决方法

问题1:加密时不知道如何将明文转化为可用于加密的数字

解决1:纠结了好久,想到看书时看到过的getByte()方法可以将字符串转化为byte数组

问题2:解密时,出现了以下问题

解决2:这个错误还没法调试,检查了好久,发现自己计算公钥e的时候模的是n,修改了成模f后,解决了该问题

问题3:之后,解密出来的文件还是有问题

解决3:调试后,发现自己犯了很蠢的错误,我把int i=0放在了while 循环里,每次循环都会把i置1...

问题4:然后,输出还是有问题,后面会多一些空格

解决4:增加一个与明文长度等长的byte数组

成功~~

五、码云链接

RSA算法java实现(BigInteger类的各种应用)的更多相关文章

  1. 算法笔记--java的BigInteger类及BigDecimal类

    引包:import java.math.*; BigInteger类: 可以使用构造方法:public BigInteger(String val),或者valueOf(int)函数,如: BigIn ...

  2. java基础-BigInteger类常用方法介绍

    java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...

  3. Java学习——BigInteger类和BigDecimal类

    Java学习——BigInteger类和BigDecimal类 摘要:本文主要学习了用于大数字运算的BigInteger类和BigDecimal类. 部分内容来自以下博客: https://www.c ...

  4. AES算法,DES算法,RSA算法JAVA实现

    1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  5. Java API —— BigInteger类

    1.BigInteger类概述        可以让超过Integer范围内的数据进行运算 2.构造方法     public BigInteger(String val) 3.BigInteger类 ...

  6. 解析java.math.BigInteger类——构造函数

    最早由于做作业,结识了java的BigInrger类.读着读着,越来越觉得有趣.后来作业做完,也不忍丢下它,索性把全部代码研究一遍. 开始的时候,一个上午时间最多读懂2个方法.但是还是有滋有味的坚持了 ...

  7. 【搬运】Tea算法Java实现工具类

    最近在做数据加密,目标是实现平台app的数据安全性,所以准备使用AES+Base64进行加密,适逢一个特长的json串AES加密不了,于是在谷歌了各种算法,判断是否合用,参见 各种加密算法比较 一文中 ...

  8. RSA算法 Android JAVA C#互通

    RSA算法属非对称加密算法,在实际使用中,往往客户端使用公钥进行加密传递敏感数据,服务端server使用私钥进行解密,这样防止中间人从网络获取敏感数据的明文. Android端主要代码如下: pack ...

  9. 重复造轮子之RSA算法(一) 大素数生成

    出于无聊, 打算从头实现一遍RSA算法 第一步, 大素数生成 Java的BigInteger里, 有个现成的方法 public static BigInteger probablePrime(int ...

随机推荐

  1. 【真】CSP2019退役记(upd:12.21)

    这是第一次CSP(Counter-Strike Professor),也是最后一次. Day-1 上午考试,日常被虐. 下午颓mc Day0 上午考试,日常被虐. 下午颓mc 晚上看了下悬线法.最小表 ...

  2. npm err! Unexpected end of JSON input while parsing near解决办法

    npm install时出现npm err! Unexpected end of JSON input while parsing near错误 输入  npm cache clean --fore ...

  3. C#使用SMTP协议发送验证码到QQ邮箱

    C#使用SMTP协议发送验证码到QQ邮箱 在程序设计中,发送验证码是常见的一个功能,用户在注册账号时或忘记密码后,通常需要发送验证码到手机短信或邮箱来验证身份,此篇博客介绍在C#中如何使用SMTP协议 ...

  4. 【译】Matplotlib:plotting

    前言 本教程源于Scipy Lecture Notes,URL:http://www.scipy-lectures.org/ 本教程若有翻译不当或概念不明之处,请大家留言,博主及时更正,以便后来的用户 ...

  5. xenserver增加新硬盘

    1. 查看所有硬盘了的id # ls -l /dev/disk/by-id/ 2. 挂载 # xe sr-create type=lvm content-type=user device-config ...

  6. XenServer三类快照

    三种类型的 VM 快照: 1.常规快照:仅创建磁盘快照,可以在所有 VM 类型(包括 Linux VM)上执行.还原快照会重启虚拟机 2.静态快照:生成虚拟机磁盘快照,生成快照前使 VM 静止.仅限于 ...

  7. css transform解释及demo(基于chrome)

    transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. Transform:(css3 转换) 注意:这些效果叠加时,中间用空格隔开 作用:能够对元 ...

  8. MariaDB日志文件、备份与恢复

    1. 数据库的6种日志 数据库有6种日志,分别是:查询日志.慢查询日志.错误日志.二进制日志.中继日志以及事务日志. 1> 查询日志 查询日志记录每一条sql语句,建议不开启,因为如果访问量较大 ...

  9. ELK快速入门(三)logstash收集日志写入redis

    ELK快速入门三-logstash收集日志写入redis 用一台服务器部署redis服务,专门用于日志缓存使用,一般用于web服务器产生大量日志的场景. 这里是使用一台专门用于部署redis ,一台专 ...

  10. Access denied for user '密码'@'192.18.0.0' (using password: YES)

    Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.6:generate (default- ...