У меня есть метод, который должен генерировать открытый ключ RSA:
import android.util.Base64;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
...
private PublicKey generatePublicKey() throws IOException {
try {
String encodedPublicKey = "TUl...QUI="; // real content is hidden
byte[] decodedKey = Base64.decode(encodedPublicKey, Base64.DEFAULT);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(decodedKey);
return keyFactory.generatePublic(keySpec);
} catch (InvalidKeySpecException e) {
String msg = "Invalid key specification: " + e;
throw new IOException(msg);
}
}
Но он выдает исключение во время выполнения последнего оператора в блоке try:
InvalidKeySpecException: java.lang.RuntimeException:
ошибка: 0c0000be: процедуры кодирования ASN.1: OPENSSL_internal: WRONG_TAG
Что здесь не так?
Вы можете попытаться отладить следующее encodedPublicKey
:
TUlJQkNnS0NBUUVBNjFCam1mWEdFdldtZWduQkdTdVMrclU5c29VZzJGbk9EdmEzMkQxQXFod2R6aXdISU5GYQpEMU1WbGNyWUc2WFJLZmtjeG5hWEdmRkRXSExFdk5CU0VWQ2dKanRIQUdaSW01R0wvS0E4NktEcC9Dd0RGTVN3Cmx1b3djWHdEd295aW5tZU9ZOWVLeWg2YVk3MnhKaDdub0xCQnExTjBiV2kxZTJpKzgzdHhPQ2c0eVYyb1ZYaEIKbzhwWUVKOExUM2VsNlNteG9sM0Mxb0ZNVmR3UGdjMHZUbDI1WHVjTWNHL0FMRS9LTlk2cHFDMkFRNlIyRVJsVgpnUGlVV09QYXRWa3Q3K0JzM2g1UmFteGg3WGpCT1hldWxtQ3BHU3luWE5jcFovMDYrdm9mR2kvMk1scFFaTmhICkFvOGVheU1wNkZjdk51Y0lwVW5kbzFYOGRLTXYzWTI2WlFJREFRQUI =