Как я могу создать объект java.security.PublicKey из строки, закодированной в base64?
У меня есть строка bse64encoded Public Key из внешнего источника (Android Store), и мне нужно использовать ее для проверки подписанного контента. Как преобразовать строку в экземпляр интерфейса java.security.PublicKey. Я нахожусь на Java 6, если это имеет значение.
Ключ (возможно) сгенерирован с использованием стандартного java lib и не bouncy castle (его из удаленной команды, поэтому я не уверен). В их примере кода используется Security.generatePublicKey(base64EncodedPublicKey); но объект Security в стандартном java не имеет такого метода.
Ответы
Ответ 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);
}