请用Java编写RSA算法
时间: 2023-07-19 09:32:40 浏览: 82
好的,以下是Java语言实现RSA算法的代码:
```java
import java.math.BigInteger;
import java.util.Random;
public class RSA {
private BigInteger privateKey;
private BigInteger publicKey;
private BigInteger modulus;
public RSA(int numBits) {
Random rand = new Random();
BigInteger p = BigInteger.probablePrime(numBits / 2, rand);
BigInteger q = BigInteger.probablePrime(numBits / 2, rand);
BigInteger n = p.multiply(q);
BigInteger phi = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE));
BigInteger e = BigInteger.valueOf(65537);
while (phi.gcd(e).intValue() > 1) {
e = e.add(BigInteger.ONE);
}
BigInteger d = e.modInverse(phi);
this.publicKey = e;
this.privateKey = d;
this.modulus = n;
}
public BigInteger encrypt(BigInteger message) {
return message.modPow(publicKey, modulus);
}
public BigInteger decrypt(BigInteger encryptedMessage) {
return encryptedMessage.modPow(privateKey, modulus);
}
}
```
这里的RSA类包含了生成公钥和私钥、加密和解密的方法。在构造函数中,我们生成了两个大素数p和q,并计算了n和phi。然后我们选择了一个公钥e,使得e和phi的最大公约数为1,计算了私钥d。公钥是一个大整数e和n的乘积,私钥是一个大整数d和n的乘积。加密和解密方法都是基于modPow函数进行的,其中加密是用公钥进行的,解密是用私钥进行的。
阅读全文