13

我正在尝试在 Android 应用程序中实现 RSA 算法。我正在使用该java.math.BigInteger.modPow()功能进行加密/解密,该功能适用​​于我的计算机(Windows 和 Xubuntu)和我的 Raspberry Pi(也是 Debian)。当在我的手机(Android 4.4.4)上执行相同的代码时,在第二次调用时会引发以下异常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()"

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

你知道为什么会抛出这个异常或者错误代码应该是什么意思吗?

4

1 回答 1

0

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

libcrypto开始:

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

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

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

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

于 2014-11-06T07:47:12.550 回答