用java写一个RSA算法
时间: 2023-09-03 15:27:18 浏览: 66
### 回答1:
下面是一个简单的Java代码实现RSA算法:
```
import java.math.BigInteger;
import java.security.SecureRandom;
public class RSA {
private final static BigInteger one = new BigInteger("1");
private BigInteger privateKey;
private BigInteger publicKey;
private BigInteger modulus;
RSA(int keySize) {
SecureRandom rnd = new SecureRandom();
BigInteger p = new BigInteger(keySize / 2, 100, rnd);
BigInteger q = new BigInteger(keySize / 2, 100, rnd);
BigInteger phi = (p.subtract(one)).multiply(q.subtract(one));
modulus = p.multiply(q);
publicKey = new BigInteger("65537");
privateKey = publicKey.modInverse(phi);
}
BigInteger encrypt(BigInteger message) {
return message.modPow(publicKey, modulus);
}
BigInteger decrypt(BigInteger encrypted) {
return encrypted.modPow(privateKey, modulus);
}
public static void main(String[] args) {
RSA rsa = new RSA(2048);
BigInteger plainText = new BigInteger(2048, new SecureRandom());
BigInteger cipherText = rsa.encrypt(plainText);
BigInteger decipheredText = rsa.decrypt(cipherText);
System.out.println("Plain Text : " + plainText);
System.out.println("Cipher Text : " + cipherText);
System.out.println("Deciphered Text : " + decipheredText);
}
}
```
这是一个简单的RSA算法实现,用于加密和解密。请注意,这不是用于生产环境的完整实现,因为它没有实现关键部分的安全性。
### 回答2:
RSA算法是一种非对称加密算法,可以用于数据加密和数字签名。下面是一个用Java编写的简化版RSA算法示例:
```java
import java.util.Random;
import java.math.BigInteger;
public class RSAAlgorithm {
private BigInteger p; // 素数p
private BigInteger q; // 素数q
private BigInteger n; // n = p * q
private BigInteger phi; // φ(n) = (p - 1) * (q - 1)
private BigInteger e; // 公钥e
private BigInteger d; // 私钥d
public RSAAlgorithm() {
// 生成两个随机素数p和q
p = generatePrimeNumber();
q = generatePrimeNumber();
// 计算n和phi
n = p.multiply(q);
phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
// 选择公钥e
e = generatePublicKey();
// 计算私钥d
d = e.modInverse(phi);
}
// 生成一个随机素数
private BigInteger generatePrimeNumber() {
Random random = new Random();
return BigInteger.probablePrime(1024, random);
}
// 选择公钥
private BigInteger generatePublicKey() {
Random random = new Random();
BigInteger publicKey;
do {
publicKey = BigInteger.probablePrime(1024, random);
} while (publicKey.compareTo(phi) >= 0 || !publicKey.gcd(phi).equals(BigInteger.ONE));
return publicKey;
}
// 加密
public BigInteger encrypt(BigInteger message) {
return message.modPow(e, n);
}
// 解密
public BigInteger decrypt(BigInteger cipher) {
return cipher.modPow(d, n);
}
public static void main(String[] args) {
RSAAlgorithm rsa = new RSAAlgorithm();
BigInteger message = new BigInteger("1234567890");
BigInteger cipher = rsa.encrypt(message);
BigInteger decryptedMessage = rsa.decrypt(cipher);
System.out.println("原始消息: " + message);
System.out.println("加密后的密文: " + cipher);
System.out.println("解密后的消息: " + decryptedMessage);
}
}
```
该示例实现了RSA算法的基本功能,包括生成公钥和私钥、加密和解密操作。在main方法中,我们生成了一个随机消息,使用公钥进行加密,然后使用私钥进行解密,最后打印出原始消息和解密后的消息供验证。请注意,该示例为简化版本,仅供演示,实际使用时需要考虑更多的安全性和性能问题。