Подтвердить что ты не робот

Как я могу создать объект java.security.PublicKey из строки, закодированной в base64?

У меня есть строка bse64encoded Public Key из внешнего источника (Android Store), и мне нужно использовать ее для проверки подписанного контента. Как преобразовать строку в экземпляр интерфейса java.security.PublicKey. Я нахожусь на Java 6, если это имеет значение.

Ключ (возможно) сгенерирован с использованием стандартного java lib и не bouncy castle (его из удаленной команды, поэтому я не уверен). В их примере кода используется Security.generatePublicKey(base64EncodedPublicKey); но объект Security в стандартном java не имеет такого метода.

4b9b3361

Ответ 1

Хорошо для усмешек... попробуйте это

  • base64 декодирует данные ключа для получения байтового массива (byte [])
  • Создайте новый X509EncodedKeySpec, используя массив байтов
  • Получить экземпляр KeyFactory с помощью KeyFactory.getInstance( "RSA" ), предполагающего здесь RSA.
  • вызов метода generatePublic (KeySpec) с помощью X509EncodedKeySpec
  • Результат/должен/быть открытым ключом для вашего использования.

Ответ 2

Код для указанного ответа

public static PublicKey getKey(String key){
    try{
        byte[] byteKey = Base64.decode(key.getBytes(), Base64.DEFAULT);
        X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
        KeyFactory kf = KeyFactory.getInstance("RSA");

        return kf.generatePublic(X509publicKey);
    }
    catch(Exception e){
        e.printStackTrace();
    }

    return null;
}

Ответ 3

Попробуйте это....

PublicKey getPublicKey(byte[] encodedKey) throws NoSuchAlgorithmException, InvalidKeySpecException
{
    KeyFactory factory = KeyFactory.getInstance("RSA");
    X509EncodedKeySpec encodedKeySpec = new X509EncodedKeySpec(encodedKey);
    return factory.generatePublic(encodedKeySpec);
}