package net.scapeemulator.util.crypto; import java.math.BigInteger; import java.security.SecureRandom; public final class RsaKeyGenerator { public static void main(String[] args) { final int bits = 512; final SecureRandom random = new SecureRandom(); BigInteger p, q, phi, modulus, publicKey, privateKey; do { p = BigInteger.probablePrime(bits / 2, random); q = BigInteger.probablePrime(bits / 2, random); phi = (p.subtract(BigInteger.ONE)).multiply(q.subtract(BigInteger.ONE)); modulus = p.multiply(q); publicKey = new BigInteger("65537"); privateKey = publicKey.modInverse(phi); } while (modulus.bitLength() != bits || privateKey.bitLength() != bits || !phi.gcd(publicKey).equals(BigInteger.ONE)); System.out.println("modulus: " + modulus); System.out.println("public key: " + publicKey); System.out.println("private key: " + privateKey); } }