RSA加密算法 公钥(N,e)产生

来源:互联网 发布:淘宝代销选择品牌技巧 编辑:程序博客网 时间:2024/06/05 04:59

RSA公钥的产生

步骤:1、随机生成两个不同的素数p,q

            2、计算出N=p*q和n=(p-1)(q-1)

    3、求出e

源代码如下:

package second.suanfa.whp;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.Random;public class createRndInteger {/** * 王海平 */public static void main(String[] args) {// TODO 自动生成的方法存根try {System.out.println("求公钥!!");System.out.println("随机产生一个长整数!!");System.out.println("请输入1-63一个整数:");BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));int num1 = Integer.parseInt(br1.readLine());long RndInteger;long p = 0, q = 0;long e = 0;int x;if (num1 >= 0 || num1 < 64) {for (int j = 1; j <= 2; j++) {for (int i = 0;; i++) {RndInteger = CreateRndInteger(num1);if (isPrime1(RndInteger) == 1) {break;}}if (j == 1) {p = RndInteger;} else {q = RndInteger;}System.out.println("随机产生的第" + j + "个" + num1 + "bit的质数是:"+ RndInteger);}// 随机获得了p,q的值后long N = p * q;// n的欧拉函数long n = (p - 1) * (q - 1);// 随机生成一个整数e,1<e<n;且e与n互质/** * 经过分析:如果随机产生的数与n的最大公约数是1,则这两个数互质 */for(int i=0;;i++){Random random = new Random();x = random.nextInt((int) n) + 1;if(common(n,x)==1);{ e=x;System.out.println("公钥为(" + N + "," + e + ")");break;}}} else {System.out.print("输入的数不再正确的区间");}} catch (Exception e) {System.out.print("输入的不是正确的数据");}}public static long CreateRndInteger(int n) {long max = (long) Math.pow(2, n) - 1;long min = (long) Math.pow(2, n - 1);Random random = new Random();long RndInteger = (long) (min + Math.random() * (max - min + 1));return RndInteger;}public static int isPrime1(long num1) {int p = 1;if (num1 % 2 == 0) {p = 0;}for (int i = 3; i <= Math.sqrt(num1); i = i + 2) {if (num1 % i == 0) {p = 0;break;}}return p;}//求公约数private static long common(long n,long b){if(n%b==0)return b;elsereturn common(b,n%b);}}


结果如下:


0 0
原创粉丝点击