Added Rsa class
This commit is contained in:
parent
dfb62957d9
commit
95363e90d0
56
src/main/java/models/Rsa.java
Normal file
56
src/main/java/models/Rsa.java
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user