java实现RSA算法
来源:互联网 发布:js获取flv的帧图片 编辑:程序博客网 时间:2024/05/24 06:37
本文按照RSA算法一步一步实现
package com.wllfengshu.test;import java.math.BigInteger;import java.util.Random;import java.util.Scanner;//RSA算法public class TestRSA {@SuppressWarnings("resource")public static void main(String[] args) {TestRSA rsa=new TestRSA();BigInteger[] primeNumber = rsa.getPrimeNumber();//step1:产生两个大素数BigInteger p=primeNumber[0];BigInteger q=primeNumber[1];System.out.println("1、B产生的两个大素数是(保密):p="+p+" q="+q);//step2.1:计算nBigInteger n=p.multiply(q);//n=p*qSystem.out.println("2、计算的n是:"+n);//step2.2:计算snBigInteger sn=(p.subtract(new BigInteger("1"))).multiply(q.subtract(new BigInteger("1")));//sn=(p-1)*(q-1)System.out.println(" 计算的sn是:"+sn);//step3:随机选取eBigInteger e=rsa.getE(sn);//0<e<sn && e和 sn互素System.out.println("3、选取的e是:"+e);//step4:计算dBigInteger d=rsa.getD(sn, e).mod(sn);//d同时与n和sn互素System.out.println("4、计算的d是:"+d);//step5:B将n和e作为公钥公开System.out.println("5、公钥:n="+n+" e="+e);//step6:用户A获取到公钥System.out.println("6、用户A已经获取到公钥了,可以开始发数据了...");//step7:进行加密System.out.println("7、请输入要发送的明文(仅数字):");Scanner scanner=new Scanner(System.in);BigInteger m=new BigInteger(scanner.next());BigInteger c=rsa.getC(m,e,n);//计算密文System.out.println("加密后的密文是:"+c);//step8:进行解密BigInteger mm=rsa.getDecrypt(c,n,d);//进行解密System.out.println("8、解密后的的结果是:"+mm);}/** * 随机产生两个大素数: res[0]、res[1] * @return */public BigInteger[] getPrimeNumber(){BigInteger p=null;BigInteger q=null;BigInteger[] res=new BigInteger[2];Random random = new Random(); p=BigInteger.probablePrime(64, random);//为了效率,此处设为64 q=BigInteger.probablePrime(64, random);res[0]=p;res[1]=q;return res;}/** * 随机选取e * 0<e<sn && e和 sn互素 * @param sn * @return */public BigInteger getE(BigInteger sn){BigInteger e = null;//说明:此处把产生的e位数-2,是防止 nextProbablePrime()方法产生的素数大于snint length = sn.toString().length()-2;// length为随机数位数e=new BigInteger(sn.toString().subSequence(0, length-2).toString()).nextProbablePrime();return e;}/** * 选取d * d同时与n和sn互素 * @param n * @param sn * @return */public BigInteger getD(BigInteger sn,BigInteger e){//Euclid算法BigInteger[] ret = new BigInteger[3]; BigInteger u = BigInteger.valueOf(1), u1 = BigInteger.valueOf(0); BigInteger v = BigInteger.valueOf(0), v1 = BigInteger.valueOf(1); if (e.compareTo(sn) > 0) { BigInteger tem = sn; sn = e; e = tem; } while (e.compareTo(BigInteger.valueOf(0)) != 0) { BigInteger tq = sn.divide(e); // tq = sn / e BigInteger tu = u; u = u1; u1 = tu.subtract(tq.multiply(u1)); // u1 =tu - tq * u1 BigInteger tv = v; v = v1; v1 = tv.subtract(tq.multiply(v1)); // v1 = tv - tq * v1 BigInteger tsn = sn; sn = e; e = tsn.subtract(tq.multiply(e)); // e = tsn - tq * e ret[0] = u; ret[1] = v; ret[2] = sn; } return ret[1];}/** * 计算密文 * c=(m^e)%n * @param m 明文 * @param e * @param n * @return */public BigInteger getC(BigInteger m,BigInteger e,BigInteger n){BigInteger c=null;c=m.modPow(e, n);//返回其值为 (m^e mod n)return c;}/** * 计算解密 * c^d=m%n m为解密后的结果 * @param c 密文 * @param n 公钥 * @param d 私钥 * @return */public BigInteger getDecrypt(BigInteger c,BigInteger n,BigInteger d){BigInteger m=null;m=c.modPow(d, n);//返回其值为 (c^d mod n)return m;}}
阅读全文
2 0
- RSA算法Java实现
- Java实现RSA算法
- JAVA实现RSA算法
- RSA算法Java实现
- java实现RSA算法
- RSA算法Java实现
- 用java实现RSA算法
- RSA算法的Java实现
- java实现RSA加密解密算法
- RSA算法介绍及JAVA实现
- java处理加密文件---实现RSA算法
- RSA算法Java的简单实现
- 学习JAVA中RSA算法实现
- RSA加密解密算法java实现
- AES算法,DES算法,RSA算法JAVA实现
- Java实现RC4加密算法、RSA算法、MD5算法
- RSA算法的实现
- VB实现Rsa算法
- mysql 按日、周、月、年统计sql语句整理,实现报表统计可视化
- JAVA 垃圾回收器的特点
- Maven生成JavaDoc
- Android5.0 显示系统(一)————从一个简单的例子开启
- Oracle几种查找和删除重复记录的方法总结
- java实现RSA算法
- CF487B Strip(单调队列预处理+单调队列优化dp)
- <工具_Eclipse>汉化Eclipse插件
- 简单神经网络实现 03
- 【Java面试题】数据库连接池Java代码实现
- HDU4465-数学期望
- mysql分区分表
- GreenDao详解(二)之在项目中配置GreenDao
- 编写一个程序统计各个数字、空白符(包括空格符、制表符及换行符)以及其它字符出现的次数