Учитывая два больших простых числа, как я могу получить адрес лука с помощью Java - PullRequest
0 голосов
/ 27 апреля 2018

Учитывая два больших простых числа и открытый показатель, я бы хотел вычислить луковый адрес сервиса tor, используя java. Учитывая следующий код:

//a couple of large primes from https://primes.utm.edu/lists/small/small2.html
BigInteger p = new BigInteger("14083359469338511572632447718747493405040362318205860500297736061630222431052998057250747900577940212317413063");
BigInteger q = new BigInteger("76921421106760125285550929240903354966370431827792714920086011488103952094969175731459908117375995349245839343");
BigInteger publicExponent = new BigInteger("65537");

//get the private key
RSAPrivateCrtKeySpec crtKeySpec = new RSAPrivateCrtKeySpec(modulus, publicExponent, privateExponent, p, q, primeExponentP, primeExponentQ, crtCoefficient);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");      
PrivateKey privateKey = keyFactory.generatePrivate(crtKeySpec);
System.out.println(getPrivateKeyString(privateKey));

//get the public key -> onion address
RSAPublicKeySpec publicSpec = new RSAPublicKeySpec(modulus, publicExponent);
PublicKey publicKey = keyFactory.generatePublic(publicSpec);
System.out.println(getOnionAddress(publicKey));

Используя следующий метод:

public static String getPrivateKeyString(PrivateKey privateKey) {
    Base64.Encoder encoder = Base64.getEncoder();  //using import java.util.Base64;
    String privateKeyEncoded = encoder.encodeToString(privateKey.getEncoded());
    StringBuffer sb = new StringBuffer();
    sb.append("-----BEGIN PRIVATE KEY-----\n");
    sb.append(privateKeyEncoded);
    sb.append("\n-----END PRIVATE KEY-----\n");
    String result = sb.toString();  
    return result;
}

Я получаю имя хоста xvufqn6goj4qh5uc . Однако, когда я использую сгенерированный закрытый ключ в сервисе tor, генерируемое имя хоста 6qbn26dres64uon3.onion .

Ранее я задавал аналогичный вопрос , но я думаю, что мой открытый ключ находится в другой кодировке и пытался использовать другой массаж, чтобы получить ожидаемый результат, но безрезультатно.

Как мне создать правильный адрес лука в моем коде?

...