2014-10-21 4 views
11

Android 애플리케이션에 RSA 알고리즘을 구현하려고합니다. 내 컴퓨터 (Windows 및 Xubuntu) 및 내 Raspberry Pi (데비안)에서 잘 작동하는 en/decryption에 java.math.BigInteger.modPow() 함수를 사용하고 있습니다. 다음과 같은 예외가 2 호출에 발생하는 동일한 코드가 내 전화 (안드로이드 4.4.4)에서 실행되는 경우 modPow()에 : 모두 문서는 '아무튼 그래서 긍정적 :Android BigInteger ArithmeticException

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()" 

나는 지수 및 계수를 확인 정말 도움이 안돼. 키 (지수 및 모듈러스)의 크기를 줄이면 아무 것도 변경되지 않았습니다. 불행하게도 나는 원시 함수에 대한 소스를 찾을 수 없었고, 어떤 일이 벌어지고 있을지 모른다고 생각합니다.

이 예외가 throw 된 이유나 오류 코드의 의미를 알고 있습니까?

+0

호기심에서 벗어나서 Android의 이전 버전 (예 : 4.2.2)을 사용해보세요. 4.4 및 많은 버그가 많이 변경되었습니다. –

+2

기본 openssl 네이티브 코드의 오류처럼 보입니다. 이것은 안드로이드 버그입니다. –

+0

SpongyCastle을 사용하고 계십니까? – EpicPandaForce

답변

0

초기화되지 않았기 때문에, BigInteger의 생성은 어떻게 든 실패했을 것입니다. libcrypto의로

:

의 bignum 라이브러리는 일반적으로 OpenSSL을 함께 제공하는 libcrypto에 살고있다. API는 openssl/bn.h에 정의되어 있습니다. 이 라이브러리는 BIGNUM 형식을 내 보냅니다. BIGNUM 객체는 정적으로 선언 된 경우에도 사용하기 전에 항상 초기화해야합니다.

코드에서 초기화하거나 낮은 API 버전을 사용해도 좋을지 확인하십시오.

번들로 제공되는 라이브러리가 플랫폼 아키텍처 32/64 비트와 일치하는지 확인하십시오.

또 다른 추측 : SSL 오류 대기열이 비어 있지 않으면 Android 4.4.4에서 BigInteger 생성시 발생할 수있는 [버그] (code.google.com/p/android/issues/detail?id=77262)가있을 수 있습니다. 네가 만난 곳.