Android BigInteger ArithmeticException

时间:2014-10-21 14:28:18

标签: java android rsa biginteger arithmeticexception

我正在尝试在Android应用程序中实现RSA算法。我正在使用java.math.BigInteger.modPow()函数进行en / / decryption,它适用于我的计算机(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()"

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

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

1 个答案:

答案 0 :(得分:0)

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

截至libcrypto

  

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

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

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

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