Added Rsa class

This commit is contained in:
Mariano Riefolo 2024-03-19 23:06:01 +01:00
parent dfb62957d9
commit 95363e90d0

View File

@ -0,0 +1,56 @@
package models;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
public class Rsa {
private final BigInteger e, d, n;
public Rsa(int numberOfBytes) {
BigInteger p = generatePrime(numberOfBytes);
BigInteger q = generatePrime(numberOfBytes);
n = p.multiply(q);
BigInteger m = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.valueOf(65537); // 2^16 + 1
d = e.modInverse(m);
}
private static BigInteger generatePrime(int numberOfBytes) {
SecureRandom secureRandom = new SecureRandom();
return new BigInteger(numberOfBytes, 100, secureRandom).nextProbablePrime();
}
public BigInteger encrypt(String message) {
BigInteger plaintext = toHex(message);
return plaintext.modPow(e, n);
}
public String decrypt(BigInteger ciphertext) {
BigInteger plaintext = ciphertext.modPow(d, n);
return fromHex(plaintext);
}
private static BigInteger toHex(String arg) {
return new BigInteger(1, arg.getBytes(StandardCharsets.UTF_8));
}
private static String fromHex(BigInteger arg) {
byte[] byteArray = arg.toByteArray();
return new String(byteArray, StandardCharsets.UTF_8);
}
public BigInteger getE() {
return e;
}
public BigInteger getD() {
return d;
}
public BigInteger getN() {
return n;
}
}