我将公钥作为字符串从Web服务器传递到Android设备,其中密钥从字符串转换回公钥。在Android设备上我收到此错误
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000af:ASN.1 encoding routines:OPENSSL_internal:TOO_LONG
android类:
@Override
public void onCreate(Bundle savedInstanceState) {
/*
* Other code
*/
PublicKey publicKey = KeyUtil.StringToPublicKey(publicKeyString);
}
关键课程:
Public class KeyUtil {
public static byte[] publicKeyToByteArray(PublicKey key) {
return Base64.encode(key.getEncoded(), Base64.DEFAULT);
}
public static PublicKey byteArrayToPublicKey(byte [] array) throws NoSuchAlgorithmException, InvalidKeySpecException {
X509EncodedKeySpec spec = new X509EncodedKeySpec(Base64.decode(array, Base64.DEFAULT));
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(spec); //Error is thrown here
}
public static PublicKey StringToPublicKey(String array) throws NoSuchAlgorithmException, InvalidKeySpecException {
byte[] b = Base64.encode(array.getBytes(), Base64.DEFAULT);
return byteArrayToPublicKey(b);
}
}
此错误仅发生在Android设备上,我能够将代码转换为字符串并将其从字符串转换为PublicKey,而java中没有任何问题。
我无法弄清楚如何在Android设备上将字符串转换为publicKey而不会出现错误。帮助很大程度上被占用了。