RSA加密OpenSSLX509CertificateFactory$ParsingException: Error parsing public key报错解决
一、代码
private static final String RSA = "RSA";
private static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";
private final static String KEY ="MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl7CuoFFgrxkQGi/LWV2yIUlLyOT7BaDjT8cJks/tfEUkpSNibvPZ2t0iflBl/i76LmdPwG8Zq23ySmODmgzx8g/Z51Onv6CSQ88jCXdL60UXvFqgcEO34POlyoCyrb1tNXV3ikjFbJVYdpnZ+yNzwCobp8217b6/xAULZgcWu2xlQ6jF1yNV/8YmZvCNfNz6SwOgEaengJzSk1rdfwXrmqzsceZrazSdgdvr69iRPQc69vvlge3tlNOnKo8cmESOnZ4jle5+Xy5/+n7IjEvJlKhOEgpWIF1FfjNDDgHXjl4jng1UoNkgwtxBvarG9YVKMZLdODdfMcwutbB9ayZ+fwIDAQAB";
@RequiresApi(api = Build.VERSION_CODES.O)
public static String encryptByPublicKey(byte[] data) throws Exception {
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(KEY.getBytes());
KeyFactory kf = KeyFactory.getInstance(RSA);
PublicKey keyPublic = kf.generatePublic(keySpec);
Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING);
cp.init(Cipher.ENCRYPT_MODE, keyPublic);
return String.valueOf(cp.doFinal(data));
}
报错如下:
java.security.spec.InvalidKeySpecException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: Error parsing public key
问题解决
将公钥使用base64加密,改为:
@RequiresApi(api = Build.VERSION_CODES.O)
public static String encryptByPublicKey(byte[] data) throws Exception {
byte[] bytes = Base64.getDecoder().decode(KEY.getBytes());
KeyFactory kf = KeyFactory.getInstance(RSA);
PublicKey keyPublic = kf.generatePublic(new X509EncodedKeySpec(bytes));
Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING);
cp.init(Cipher.ENCRYPT_MODE, keyPublic);
return Base64.getEncoder().encodeToString(cp.doFinal(data));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)