此错误意味着什么:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000b9:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
我的代码是:
public static byte[] encryptByPublicKey(byte[] data, String key)
throws Exception {
key = key.replace("-----BEGIN RSA PUBLIC KEY-----\r\n", "").replace("-----END RSA PUBLIC KEY-----", "");
byte[] bytes = decryptBASE64(key);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(bytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
PublicKey pkPublic = keyFactory.generatePublic(x509KeySpec);
Cipher pkCipher = Cipher.getInstance("RSA");
pkCipher.init(Cipher.ENCRYPT_MODE, pkPublic);
return pkCipher.doFinal(data);
}
我确定,我有正确的数据和 key (在 php 中创建),但我收到此错误:
PublicKey pkPublic = keyFactory.generatePublic(x509KeySpec);
我在我的其他 Android(没有 php 服务器)应用程序中使用此代码没有任何问题,并且我通过相同的加密/解密代码得到了正确的答案。
在同一个软件中,两个项目中使用相同输入和输出值的函数是否可能有不同的操作?是的!这是可能的,但是 Android Studio 和 Phpstorm 怎么样?是关于 Openssl cer 的吗?或者其他图书馆?还是其他一些原因?我怎样才能克服这个错误?
如果您能帮助我,我将不胜感激。预先感谢您的回答。
最佳答案
请检查 key 字符串,可能包含非法的Base64字符:“\n”、“\t”或\s等,请将其删除并重试!
关于php - ASN.1编码例程:OPENSSL_internal:WRONG_TAG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44616565/