Android BigInteger ArithmeticException

我正在尝试在Android应用程序中实现RSA算法。我正在使用en-/decryption函数,该函数适用于我的计算机(Windows和Xubuntu)和我的Raspberry Pi(也是Debian)。当我的手机(Android 4.4.4)上执行相同的代码时,在第二次调用时会引发以下异常:java.math.BigInteger.modPow()modPow()

java.jang.ArithmeticException: error:0306B06B:bignum routines:BN_div:not initialized
    at java.math.NativeBN.BN_mod_exp(NativeMethod)
    at java.math.BigInt.modExp(BigInt.java:327)
    at java.math.BigInteger.modPow(BigInteger.java:997)
    at "where I call java.math.BigInteger.modPow()"

我检查了指数和模数:两者都是正数,所以文档并没有真正的帮助。减小键的大小(指数和模数)也没有改变任何东西。不幸的是,我找不到本机函数的源代码,并且不知道可能发生了什么。

您是否知道为什么会引发此异常或错误代码应该是什么意思?


答案 1

因为它告诉你没有初始化,所以BigInteger的创建一定以某种方式失败了。

截至libcrypto

BIGNUM库通常位于OpenSSL附带的libcrypto中。它的 API 是在 openssl/bn.h 中定义的。此库导出 BIGNUM 类型。BIGNUM 对象在使用前始终需要初始化,即使它们是静态声明的。

因此,请检查您是否可以从代码中初始化它或尝试较低的api版本,因为我对此并不深入。

还要检查捆绑的库是否与您的平台架构32/64位相对应。

另一个猜测:Android 4.4.4在创建BigIntegers时可能有一个[错误](code.google.com/p/android/issues/detail?id=77262),如果SSL错误队列不为空,也许这就是你遇到的。


答案 2

推荐