php - ASN.1编码例程:OPENSSL_internal:WRONG_TAG

标签 php android public-key-encryption

此错误意味着什么:

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/

相关文章:

ios - 在 iOS 中使用公钥验证数字签名

php - 将 wordpress 从共享虚拟主机 cpanel 迁移到 VPS 后出现白屏

javascript - 如何使用正则表达式将文本样式更改为特定模式?

php - Magento - 如何确定一个对象是否是 Varien 对象?

android - 果冻 bean 锁屏小部件

javascript - 如何在没有对称密码的情况下将公钥/私钥用于短数据

encryption - 如何手动计算和验证证书签名请求的签名

php - Laravel 4 - 在构建集合时将 where 子句附加到关系的 Eloquent 方式

android - 在 Android 应用程序中使用 DIAL 协议(protocol)

android - DialogFragment - 在何处访问布局组件 [即editText.setText ("")]