您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 密码学大素数生成java源码
因为自己也是信息安全专业的,老师留的作业编程实现大素数生成算法。但自己当时在网上找了一下,都不太好,还需要自己修改。虽然java自带相关的类方法,但感觉还是自己写程序实现比较好。下面是自己写的程序,亲测能够使用。思路在备注上有,这里就不多说了。importjava.math.BigInteger;publicclassbigPrime{staticBigIntegers_prime=newBigInteger(1);//定义一个BigInteger类型的变量s_prime,用来存放产生的大素数;因为构造函数没有无参的所以初始化为1。privatestaticfinalBigIntegerZERO=BigInteger.ZERO;privatestaticfinalBigIntegerONE=BigInteger.ONE;privatestaticfinalBigIntegerTWO=newBigInteger(2);privatestaticStringBuffer[]digits={newStringBuffer(0),newStringBuffer(1),newStringBuffer(2),newStringBuffer(3),newStringBuffer(4),newStringBuffer(5),newStringBuffer(6),newStringBuffer(7),newStringBuffer(8),newStringBuffer(9)};privatestaticBigIntegerprimeList[]=newBigInteger[1000];privatestaticintk=0;//////////////////////////////////主方法:1:调用构造方法生成2000以内的素数;2:调用bigRandom(20)方法生成20位的随机大奇数;3:removeEvenNumber(s_prime)除去偶数;4:fermatPrimalityTest(s_prime)利用Fermat素性检验;publicstaticvoidmain(Stringargs[]){newbigPrime();for(intj=0;j10;j++){while(true){s_prime=bigRandom(20);s_prime=removeEvenNumber(s_prime);if(fermatPrimalityTest(s_prime)){System.out.println(s_prime+是素数!);break;}}}}//////////////////////////////生成2000以内的素数并初始化primeList[1000]publicbigPrime(){Stringstr_prime;for(inti=2;i2000;i++){booleanflag=true;for(intj=2;jMath.sqrt(i);j++)if(i%j==0){flag=false;break;}if(flag){str_prime=Integer.toString(i);primeList[k++]=newBigInteger(str_prime);}}}///////////////////Fermat素性检验publicstaticbooleanfermatPrimalityTest(BigIntegernum){for(inti=0;ik;i++){if(!((primeList[i].modPow(num.subtract(ONE),num).compareTo(ONE))==0)){returnfalse;}}returntrue;}/////////////////一次产生一个0~9的随机数,并保证最高位不是零privatestaticStringBufferrandomDigits(booleanisZero){intindex;if(isZero){index=(int)(Math.floor(Math.random()*10));}else{index=1+(int)(Math.floor(Math.random()*9));}returndigits[index];}/////////////产生大的随机数publicstaticBigIntegerbigRandom(intn){StringBuffers=newStringBuffer();for(inti=0;in;i++){if(i==0){s.append(randomDigits(false));}else{s.append(randomDigits(true));}}return(newBigInteger(s.toString()));}/////////去除偶数privatestaticBigIntegerremoveEvenNumber(BigIntegern){return(n.mod(TWO).compareTo(ZERO)==0)?n.add(ONE):n;}}
本文标题:密码学大素数生成java源码
链接地址:https://www.777doc.com/doc-5053385 .html