Can't generate RSA public key

676 views Asked by At

I'm trying to learn about rsa public key generations. After some researches I create an "simple" code that should return a public key but I don't know why, it doesn't. Can anyone tell me why and explaine it?

public static byte[] GetTokens(String paramString) {
    StringTokenizer stringTokenizer = new StringTokenizer(paramString, ",");
    byte[] arrayOfByte = new byte[stringTokenizer.countTokens()];
    for (byte b1 = 0; stringTokenizer.hasMoreTokens(); b1++) {
       arrayOfByte[b1] = Byte.parseByte(stringTokenizer.nextToken());
    }
    return arrayOfByte;
}

public static PublicKey GenPublicKey() throws Exception {
    BufferedReader bufferedReader  = new BufferedReader(new FileReader("input_text"));

    try {
        String str1 = bufferedReader.readLine();
        String str2 = bufferedReader.readLine();
        
        BigInteger bigInteger1 = new BigInteger(GetTokens(str1));
        BigInteger bigInteger2 = new BigInteger(GetTokens(str2));
        
        RSAPublicKeySpec rSAPublicKeySpec = new RSAPublicKeySpec(bigInteger1, bigInteger2);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PublicKey publicKey = keyFactory.generatePublic(rSAPublicKeySpec);
        return publicKey;
    }
    catch (NoSuchAlgorithmException e) {
        System.out.println("Exception thrown : " + e);
        throw new IOException("Error reading key, ");
    }

    finally {
        try {
            bufferedReader.close();
        } catch (Exception exception) {}
    }
}

To testing it I wrote aleatory numbers on "input_text" file: 8,33 6,18

1

There are 1 answers

4
AhmedSHA256 On

I will provide the code you need to generate a RSA public key:

import java.io.*;
import java.security.*;
import java.security.spec.*;
import java.util.*;

public class Hello {
    public static void main(String[] args) throws NoSuchAlgorithmException {
        // We generate an instance that allows to create private/public key pairs
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");

        // We use 1024 bits lenght
        keyPairGenerator.initialize(2048);

        // We generate key pair
        KeyPair keyPair = keyPairGenerator.generateKeyPair();

        // Original message
        String originalMessage = "Hello";

        // We obtain public key
        Key publicKey = keyPair.getPublic();

        // We convert the string in order to send the Key to the emitter
        String publicKeyText = keyToString(publicKey);
        System.out.println("Public key: " + publicKeyText);
    }

    private static String keyToString(Key publicKey) {
        byte[] publicKeyBytes = publicKey.getEncoded();
        String key = Base64.getEncoder().encodeToString(publicKeyBytes);

        return key;
    }
}