Попытка преобразовать закрытый и открытый ключи в формат String - PullRequest
0 голосов
/ 03 февраля 2019
import java.security.*;

public class MyKeyGenerator {

    private KeyPairGenerator keyGen;
    private KeyPair pair;
    private PrivateKey privateKey;
    private PublicKey publicKey;
    private Context context;

    public MyKeyGenerator(Context context, int length)throws Exception{
        this.context =context;
        this.keyGen = KeyPairGenerator.getInstance("RSA");
        this.keyGen.initialize(length);
    }

    public void createKeys(){
        this.pair = this.keyGen.generateKeyPair();
        this.privateKey = pair.getPrivate();
        this.publicKey = pair.getPublic();
    }

    public PrivateKey getPrivateKey(){
        return this.privateKey;
    }

    public PublicKey getPublicKey(){
        return this.publicKey;
    }

    public  String getPrivateKeyStr(){
        byte b [] = this.getPrivateKey().getEncoded();
          return new String(b));
    }

    public  String getPublicKeyStr(){
        byte b [] = this.getPublicKey().getEncoded();
        return new String(b));
    }


}

Здравствуйте, я искал SO для того, как преобразовать или получить строковое представление открытого ключа или личного ключа, большинство ответов были очень старыми и только для того, чтобы преобразовать String pubKey = "....«;в ключ.Я попытался сгенерировать ключи и получить закодированные байты, и я попытался преобразовать байт в строку, как показано в моем коде выше, но я не уверен, что делаю это правильно, просто преобразовав закодированные байты в строку.

1 Ответ

0 голосов
/ 03 февраля 2019
  1. Байты закрытого / открытого ключа: byte [] theBytes = key.getEncoded ();
  2. Использование новой строки (theBytes) не очень хорошо, потому что используется набор символов по умолчанию (основанный наОПЕРАЦИОННЫЕ СИСТЕМЫ).Лучше передать кодировку, которую вы хотите (например, UTF-8), чтобы быть последовательной в этом.
  3. Я бы предложил иметь HEX-представление закрытых / открытых ключей.Существует несколько способов преобразования байта [] в строку HEX ( Java-код Для преобразования байта в шестнадцатеричный ).Наличие формата HEX также упрощает чтение ключа в некотором пользовательском интерфейсе.Например: AA BB CC 22 24 C1 ..
  4. Другой вариант - формат Base64, например: Base64.getEncoder (). EncodeToString (theBytes).(Java 8)
...