【问题标题】:Android OS12 Pixel Device RSA issueAndroid OS12 像素设备 RSA 问题
【发布时间】:2022-01-24 18:17:50
【问题描述】:

大家好,我有一个使用加密和 JWT 的应用。

我在我的 Pixel 5 OS12 设备上进行了测试,没有任何问题。我刚刚在我的新 Pixel 6 Pro 上进行了测试,我得到了一个糟糕的填充异常?

javax.crypto.BadPaddingException: 错误:04000089:RSA 例程:OPENSSL_internal:PKCS_DECODING_ERROR

设备发送我需要解码的 base64 字符串,然后用我的私钥解密 RSA

val decoded = android.util.Base64.decode(full, android.util.Base64.NO_WRAP)

fun decryptByPrivateKey3(encryptedData: ByteArray?): ByteArray? {
    val privateKey = getKeyFromString()
    return try {
        val cipher1: Cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding")
        cipher1.init(Cipher.DECRYPT_MODE, privateKey)
        cipher1.doFinal(encryptedData)
    } catch (e: java.lang.Exception) {
        Timber.d("Error Decrypting Key $e")
        null
    }
}

奇怪的原因是它是标准代码。如果我删除了 RSA/ECB/PKCS1Padding,它会通过,但会导致我的 JWT 签名出现问题。(因为这是秘密消息)

任何人在不同的手机上对此有疑问?

【问题讨论】:

  • 您确认privateKeyencryptedData 在这两种情况下是相同的吗?
  • 加密数据作为base64解码接收,然后用RSA和私钥解密。在我的像素 5 上,没有任何问题像魅力一样发挥作用,但在我的像素 6 pro 甚至三星 s9 等其他设备上,我得到了一个糟糕的填充异常。设备使用 rsa public 对其进行签名,我使用与设备相同的密钥对中的私有 rsa 密钥解密
  • 您能否发布一个示例私钥和密文,该示例在一台设备上有效,而在另一台设备上无效?还有getKeyFromString()的实现。
  • 实际上你是对的。我猜每个设备的键都会改变..因为使用我的像素总是相同的键。我检查了我的数据库,它根本不一样。经过测试,它工作正常。谢谢!

标签: android jwt rsa


【解决方案1】:

似乎使用一部手机总是有相同的按键。当我使用另一部手机时,密钥发生了变化。RSA 被硬编码以进行测试。

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    相关资源
    最近更新 更多