《密碼學(xué)大素?cái)?shù)生成java源碼(共3頁)》由會員分享,可在線閱讀,更多相關(guān)《密碼學(xué)大素?cái)?shù)生成java源碼(共3頁)(3頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上
因?yàn)樽约阂彩切畔踩珜I(yè)的,老師留的作業(yè)編程實(shí)現(xiàn)大素?cái)?shù)生成算法。但自己當(dāng)時(shí)在網(wǎng)上找了一下,都不太好,還需要自己修改。雖然java自帶相關(guān)的類方法,但感覺還是自己寫程序?qū)崿F(xiàn)比較好。下面是自己寫的程序,親測能夠使用。
思路在備注上有,這里就不多說了。
import java.math.BigInteger;
public class bigPrime
{
static BigInteger s_prime=new BigInteger("1");//定義一個(gè)BigInteger類型的變量s_prime,用來存放產(chǎn)生的大素?cái)?shù);因?yàn)闃?gòu)造函數(shù)沒有
2、無參的所以初始化為1。
private static final BigInteger ZERO=BigInteger.ZERO;
private static final BigInteger ONE=BigInteger.ONE;
private static final BigInteger TWO=new BigInteger("2");
private static StringBuffer []digits={new StringBuffer("0"),new StringBuffer("1"),new StringBuffer("2"),new StringBuffer(
3、"3"),new StringBuffer("4"),new StringBuffer("5"),new StringBuffer("6"),new StringBuffer("7"),new StringBuffer("8"),new StringBuffer("9")};
private static BigInteger primeList[]=new BigInteger[1000];
private static int k=0;
//////////////////////////////////主方法:1:調(diào)用構(gòu)造方法生成2000以內(nèi)的素?cái)?shù); 2:調(diào)用bigRando
4、m(20)方法生成20位的隨機(jī)大奇數(shù); 3:removeEvenNumber(s_prime)除去偶數(shù); 4:fermatPrimalityTest(s_prime)利用Fermat素性檢驗(yàn);
public static void main(String args[])
{
new bigPrime();
for(int j=0;j<10;j++)
{
while(true)
{
s_prime=bigRandom(20);
s_prime=removeEvenNumber(s_prime);
if(fe
5、rmatPrimalityTest(s_prime))
{
System.out.println(s_prime+"是素?cái)?shù)!");
break;
}
}
}
}
//////////////////////////////生成2000以內(nèi)的素?cái)?shù)并初始化primeList[1000]
public bigPrime()
{
String str_prime;
for(int i=2;i<2000;i++)
{
boolean flag=true;
for(in
6、t j=2;j
7、teger num)
{
for(int i = 0; i < k; i++)
{
if(!((primeList[i].modPow(num.subtract(ONE),num).compareTo(ONE))==0))
{
return false;
}
}
return true;
}
/////////////////一次產(chǎn)生一個(gè)0~9的隨機(jī)數(shù),并
8、保證最高位不是零
private static StringBuffer randomDigits(boolean isZero)
{
int index;
if(isZero)
{
index=(int)(Math.floor(Math.random()*10));
}
else
{index=1+(int)(Math.floor(Math.random()*9));}
return digits[index];
}
/////////////產(chǎn)生大的隨機(jī)數(shù)
public static BigInteger bigRandom(int n)
9、
{
StringBuffer s=new StringBuffer("");
for(int i=0;i