gpt4 book ai didi

ssl - 在安卓 Lollipop 上进行RSA解密

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:53 24 4
gpt4 key购买 nike

我在使用 RSA 解密时遇到错误。该代码适用于 android 4.4 kit kat,但同一应用程序不适用于 android 5.0 lollipop。

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(modulusBytes), new BigInteger(exponentBytes));
RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(pubKeySpec);

byte[] decrypted = null;
try {
// get an RSA cipher object and print the provider
final Cipher cipher = Cipher.getInstance("RSA/None/NoPadding");

// decrypt the text using the public key
cipher.init(Cipher.DECRYPT_MODE, publicKey);
decrypted = cipher.doFinal(area_fissa_byte);

} catch (Exception ex) {
ex.printStackTrace();
Log.d("error","error");
}

错误是:java.security.SignatureException: error:04067084:rsa routines:RSA_EAY_PUBLIC_DECRYPT:data too large for modules

我的 sdk 目标是:

<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
适用于安卓 4.4

你知道问题出在哪里吗?

编辑:我注意到我有 2 个不同长度的公钥!!!Android 5:我有 382/383 位(太小)Android 4.4: 我有 384 位 (ok)

编辑 2:我发现与 android 5.0 的 TLS/SSL 存在差异:https://developer.android.com/about/versions/android-5.0-changes.html但我不知道如何解决这个问题。

最佳答案

一个错误是您如何创建 RSAPublicKeySpec:

new RSAPublicKeySpec(new BigInteger(modulusBytes), new BigInteger(exponentBytes));

如果 modulusBytes 或 exponentBytes 的第一位是 1,则数字将被解释为负值。

当您使用 RSA 数字和 BigInteger 时,始终使用构造函数 BigInteger (int signum, byte[] magnitude)signum=1 来指定数字为正数:

new RSAPublicKeySpec(new BigInteger(1, modulusBytes), new BigInteger(1, exponentBytes));

关于ssl - 在安卓 Lollipop 上进行RSA解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com