import java.security.SecureRandom;
public class MillerRabin {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("2047\t"+MillerRabin(2047, 1));
System.out.println("1203972837\t"+MillerRabin(1203972837, 1));
System.out.println("65535\t"+MillerRabin(65535, 1));
}
/**
*
* @param n The number should be tested whether it is a prime.
* @param t
* @return
* true means n is a prime with a probability of (1/4)^t.
* false means n is a composite number with a probability of 1.
*/
public static boolean MillerRabin(int n,int t)
{
for(int i=0;i<t;i++)
if(!isPrime(n))
return false;
return true;
}
/**
*
* @param n The number should be tested whether it is a prime.
*/
public static boolean isPrime(int n)
{
int k,q;
SecureRandom random=new SecureRandom();
for(k=0;(((n-1)>>k)&1)==0;k++);
q=(n-1)>>k;
int a=random.nextInt(n);
if(squareMultiply(a, q, n)==1)
return true;
for(int j=0;j<k;j++)
if(squareMultiply(a, (int)Math.pow(2, j)*q, n)==n-1)
return true;
return false;
}
public static int squareMultiply(int a,int b,int p)
{
int x=1,y=a;
int len=(int)Math.ceil((Math.log(b)/Math.log(2)));
for(int i=0;i<len;i++)
{
if(((b>>i)&1)==1)
{
x=(x*y)%p;
}
y=(y*y)%p;
}
return x;
}
}
分享到:
相关推荐
### Miller_Rabin算法研究与优化实现 #### 一、引言 随着信息技术的快速发展和互联网的广泛应用,信息安全问题变得越来越重要。特别是在电子商务领域,确保信息的保密性、完整性和不可否认性对于保护用户数据安全...
**米勒-拉宾素性测试(Miller-Rabin Primality Test)** 在计算机科学和数论中,米勒-拉宾素性测试是一种用于判断一个大整数是否为素数的有效概率算法。这个测试是由米勒(Gary L. Miller)在1976年提出,后由拉宾...
波拉德-rho-分解器使用 Pollard-Rho 算法将数字分解为质因数,并使用 Miller-Rabin 检验验证质数。 当前编程为在作为参数给出的范围内SSN * (10 ^ 6 + j) + i 。 二次筛未实施。
- `int Miller_rabbin(long long n)`函数实现了Miller-Rabin算法的核心逻辑。 - 选取随机数`a`。 - 调用`power`函数计算`a^(n-1) mod n`。 - 检查计算结果是否等于1。 - `void power(long long a, long long b,...
根据给定的信息,本文将详细解释如何在Java中实现RSA加密算法,并且解析代码中的关键概念与步骤。 ### RSA加密算法简介 RSA是一种非对称加密算法,它基于大数分解难题来确保安全性。RSA算法涉及到两个密钥:公钥...
Prime test(Miller-Rabin's method) 2D Array Arbitary Integer Linear congruential generator Maximum subarray problem Bit-Set Queue Stack Binary Heap Fibonacci Heap Priority Queue (list based) Bubble ...
常用的素性检测方法包括Miller-Rabin测试等。 #### 4. RSA算法的具体构造 RSA算法的构建过程主要包括以下几个步骤: 1. **选择大素数**:选取两个大素数 \(p\) 和 \(q\)(保密)。 2. **计算乘积和欧拉函数值**:...
- 实现思路:采用Miller-Rabin素性测试算法,这是一种概率性算法,用于确定一个给定的数是否为素数。 以上实验内容展示了如何在C++环境下实现RSA算法的基本功能,并提供了相关的数学基础和安全注意事项。通过这些...
《深入解析Java Random源码与Prime随机生成器》 在Java编程中,`java.util.Random`类是用于生成...通过对这些源码的深入研究,开发者不仅可以掌握随机数生成的基本原理,还能学习到如何在实际项目中实现高效的算法。
素数检测有多种方法, 一般使用Miller-Rabin测试法,也可以使用Agrawal、Kayal、Saxena在2002年提出的算法,该算法相当完美。 RSA算法是现代公钥密码体制事实上的标准,虽然它有被椭圆曲线密码算法(ECC)取代的...
编程实现大素数的随机生成;快速判定任意一个大数是否是素数;验证1000以内数的哥德巴赫猜想。(注:素数即只能被1和本身整除的正整数;哥德巴赫猜想:任何一个大于6的偶数都可以表示成两个素数之和。)
1. **素数检测**:RSA算法依赖于大素数的选取,代码中可能包含了检测大整数是否为素数的算法,如Miller-Rabin测试或AKS测试。 2. **密钥生成**:包括了生成一对公钥和私钥的过程,这通常涉及到随机数生成、大整数的...
2. 素数检测:编写函数来检查一个数是否为素数,通常采用线性探测法或Miller-Rabin测试。 3. 欧拉函数计算:根据给定的p和q计算φ(n)。 4. 互质判断:确定e和φ(n)是否互质,可以使用欧几里得算法。 5. 模逆运算:...
在实现过程中,Miller-Rabin概率素性检验算法用于生成大素数,确保了P和q的素性。同时,DSA的每消息秘密数k也需要随机生成,这里使用了特定的构造函数G(t, c)。SHA-1算法的实现则保证了消息摘要的安全性。 总结来说...
在DSS参数生成部分,论文详细阐述了如何生成大素数,包括使用Miller-Rabin概率素性检验算法和DSA素数生成算法。此外,还介绍了如何生成随机数,以及SHA-1散列函数的构造方法,这些都是生成安全签名的重要环节。DSA的...
除了基本的加密解密实现,项目可能还涉及到了miller-rabin素数测试,这是一个用于确定大整数是否为素数的有效概率算法。在密码学中,素数常常用于生成公钥密码系统中的大素数,例如RSA算法。Miller-Rabin测试的效率...
素数相关算法是另一个重点,文档提到了普通素数判断、经典的埃拉托斯特尼筛法(Sieve of Eratosthenes)、优化的欧拉筛法以及Miller-Rabin素性测试。 通过以上内容的整理,我们可以看出文档作者在为ACM算法竞赛的...