Java编程–RSA算法中的大整数运算

RSA原理浅析

RSA是利用陷门单向函数实现的,其安全基础依赖于大整数的分解问题的难解性

算法过程

为了加深对RSA算法的了解,接下来通过简单的一个例子来分析一下:

eg:根据已知参数:p=3,q=11,M=2p = 3, q = 11, M = 2p=3,q=11,M=2,手工计算公私钥,并对明文进行加密,然后对密文进行解密。

(1)首先计算n=p×q=3×11=33n = p × q = 3 × 11 =33n=p×q=3×11=33

(2)Φ(n)=(p−1)(q−1)=2×10=20Φ(n) = (p - 1)(q - 1) = 2 × 10 = 20Φ(n)=(p−1)(q−1)=2×10=20

(3)选取加密密钥e=3e = 3e=3, 因为有1<e<Φ(n)1< e < Φ(n)1

(4)计算ddd, 使de≡1(mod&ThinSpace;&ThinSpace;Φ(n))de ≡ 1(\mod Φ(n))de≡1(modΦ(n)),容易求解d=7d = 7d=7,ddd是私钥

(5)加密过程:对于明文M=2,c=Memod&ThinSpace;&ThinSpace;n=23mod&ThinSpace;&ThinSpace;33=8M=2, c = M^e\mod n = 23 \mod 33 = 8M=2,c=Memodn=23mod33=8

(6)解密过程 M=cdmod&ThinSpace;&ThinSpace;n=87mod&ThinSpace;&ThinSpace;33=2097152mod&ThinSpace;&ThinSpace;33=2M = c^d \mod n = 87 \mod 33 = 2097152 \mod 33 = 2M=cdmodn=87mod33=2097152mod33=2

不难理解,当p,q非常大时,攻击者想要通过n值分解为p x q将是极其困难的,因此我们要尽可能找到大的素整数。

Java大整数运算

程序示例: 随机选择3个较大的素数x、e、nx、e、 nx、e、n ,计算 xe%nx^e \% nxe%n

//生成指定比特长度的大素数

public static BigInteger genBigPrimer(int length){

Random random = new Random(new Date().getTime());

return BigInteger.probablePrime(length, random);

}

//大素数运算

public static void bigPrimerCalc(int len_X,int len_E, int len_N){

//Get x,e,n

BigInteger big_X = genBigPrimer(len_X);

BigInteger big_E = genBigPrimer(len_E);

BigInteger big_N = genBigPrimer(len_N);

//Calculate x^e%n

BigInteger BigResult = big_X.modPow(big_E, big_N);

System.out.println( big_X+"^" );

System.out.println( big_E+ " mod " );

System.out.println( big_N+ " is " );

System.out.println( BigResult);

}

java 大整数编程_Java编程--RSA算法中的大整数运算相关推荐

  1. RSA算法中的大素数-素性测试

    0 前言 RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难. 本文讨论关于素数的相关知识. 1 素性测试 问题1: 如何判断一个大整数是否为素数 ...

  2. java 取反 值_java编程 按位取反的问题 java中取反操作是正数

    这个问题涉及到计算机内部的编码. 对于整数,计算机内部用最高位表示符号位,0表示为正,1表示为负. 对于负数,为了便于计算,计算机用补码来表示其值. 已经一个数的补码,要知道其值分两种情况: 1:符号 ...

  3. java快排原理_Java数据结构与算法——快速排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中最常用也是面试中最容易考到的排序算法--快排,包括快排的思 ...

  4. java rsa 128_如何用java实现128位密钥的RSA算法

    展开全部 import javax.crypto.Cipher; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; impor ...

  5. 简明解释算法中的大O符号

    http://blog.jobbole.com/55184/ 伯乐在线导读:2009年1月28日Arec Barrwin在StackOverflow上提问,"有没有关于大O符号(Big O ...

  6. 快乐地谈谈:关于RSA算法中求私钥d的欧几里得方法(辗转相除法)考试向的欸

    关于RSA算法本身,就提及一下,它是属于非对称密码体制. 基本的加密方式就如下图所示: c为加密后的密文,m为加密前的明文 其中一般会给出公开密钥n.e的值,这样根据规则,便可以实现加密过程.而题目往 ...

  7. java 判断是否是小数_判断字符串中是否是整数和小数的方法

    判断字符串中是否是整数和浮点数的方法有几种方式,下面分别介绍: 1.用JAVA自带的函数,判断是否为整数 public static boolean isNumeric(String str) { f ...

  8. java 判断能否整除_java编程,键盘输入一个整数,判断能否被5和6整除,再判断能否被5或6整除?...

    展开全部 首先判断能否同时被5和e68a84e8a2ad62616964757a686964616f313333656435666整除,如果不能再单独判断是否能被5或者6整除. import java ...

  9. java for循环排序_java编程问题。用两个for循环来把输入的整数从小到大排序。

    展开全部 这样的代码看的费劲 数组排序62616964757a686964616fe59b9ee7ad9431333363366165的方法有冒泡和选择比较的好理解: 代码如下: package co ...

最新文章

  1. 【风险管理】假如我是风控经理,会搭建怎样的风控团队
  2. json怎么读取数据库_如何:使用Json插入数据库并从中读取
  3. testNG之组测试
  4. dubbo之服务降级
  5. 用CALayer实现下载进度条
  6. 批量txt数据转换为excel
  7. 一文解析SQLServer数据库
  8. 基于三菱PLC的全自动洗衣机控制系统设计
  9. 【python】画图保存为emf
  10. word表格分开快捷键_Word使用技巧(表格技巧、快捷键)
  11. Latex参考文献的代码
  12. ORB_SLAM2系列之三:ORB_SLAM2跑RGBD SLAM数据集
  13. 微信 - 微信小程序
  14. 航运人工智能提升全球集装箱海陆各环节作业效率,箱管控,CIMCAI自动化集装箱况残损检测/箱信息识别数字化录入,智慧航运智能航运
  15. 企业邮箱格式怎么写怎么申请邮箱?电子邮箱的正确填写地址
  16. VirtualBox安装centos7时无法安装问题
  17. 罗杨老师带你了解谷歌编程之夏(GSoC)活动全流程
  18. 【JS代码提高--003】:JavaScript 生成间于最小值和最大值之间的随机数
  19. 记一次软考高项【信息系统项目管理师】重点
  20. Linux程序设计 读笔2 Shell脚本

热门文章

  1. 【小练习06】HTML+CSS--教学大讲堂
  2. python发送邮件拒绝_人生苦短之Python发邮件
  3. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据
  4. Docker 创建1个自己的Tomcat 镜像
  5. Redhat 打开防火墙某个端口
  6. opensuse 12.1 启动脚本
  7. Linux下监控磁盘io,如何在Linux下监控磁盘IO?
  8. android点击隐藏控件,Android编程实现点击EditText之外的控件隐藏软键盘功能
  9. android输入法源码分析,基于Android的输入法的设计与实现.doc
  10. import pymysql 没有模块_小白详细的 python 模块的运用