2012-03-12 3 views
1

내 애플리케이션 클래스 경로에 탄력성 jar 파일을 Android 및 Java에 추가했습니다. 이 두 코드 모두에서 사용한 코드입니다. 그러나 공급자 "BC"를 인식하는 것 같지 않습니다.Bouncy castle 해당 제공자 예외가 없습니다.

java.security.NoSuchProviderException: no such provider: BC 


어떻게이 문제를 해결하려면 :

SecureRandom sr1=new SecureRandom().getInstance("SHA1PRNG", "BC"); 
     System.out.println(sr1.getProvider()); 
     sr1.setSeed(12); 
     byte[] a=new byte[0]; 
     sr1.nextBytes(a); 
     int ai=a[0]; 
     System.out.println(ai); 


그것은 모두 안드로이드와 자바에 다음과 같은 예외가 발생

?
정책 파일에 공급자를 추가하지 않았습니다. 그렇게 한 후에 다음과 같은 예외가 발생합니다.

java.security.NoSuchAlgorithmException: no such algorithm: SHA1PRNG for provider 
BC<br> 


그것은 탄력이 성이 "SHA1PRNG"알고리즘의 구현을 제공하지 않는다는 것을 의미합니까? 그러나 내가 성을 수입 한 전체 이유는 안드로이드와 자바 모두에서 공통의 공급자를 가지므로 동일한 시드로 생성 된 난수의 순서가 안드로이드와 자바에서 동일합니다.

답변

-1

분명히 SecureRandom 구현을 제공하지 않습니다. 이 같은 시스템 (하모니에서) 구현 (정적 메서드를 호출 할 인스턴스를 만들 필요가 없습니다) 얻을 수 있습니다 :

SecureRandom.getInstance("SHA1PRNG") 

BouncyCastle 아마 비슷한 방식으로 사용 할 수 DigestRandomGenerator을 가지고,하지만 수도 있고하지 않을 수 있습니다 생성 SecureRandom를 사용하여 OTP를 :

다시 태양 SHA1PRNG와 호환 (독점 것으로 보인다, 정말 잘 정의) 고정 씨앗과 SecureRandom하지이 적합한 도구입니다. OTP를 생성하려면 예측 가능한 요소 (시간 또는 카운터)와 결합 된 비밀 키를 사용해야합니다. 표준 방법은 예를 들어, 맹세. 자세한 내용은 RFC 4226을 참조하십시오.

+0

, 그것은 않습니다 사용자 지정 시드에 엔트로피를 추가하지 않습니다. 보안 임의 번호의 두 인스턴스가 java에서 사용되는 경우 동일한 일련의 번호가 생성됩니다. 안드로이드에서도 똑같은 일이 일어나고 있습니다. 그러나 문제는 안드로이드와 자바에서 생성 된 시퀀스가 ​​동일하지 않다는 것입니다. – Ashwin

+0

그래, 내가 틀렸다. 엔트로피를 한 번 이상 호출하면 엔트로피 만 추가됩니다. 그래도 시퀀스를 일치 시키려면 데이터베이스를 사용하고 숫자를 증가시킵니다. 보안 임의 생성기는이를위한 도구가 아닙니다. 안드로이드에서 BC를 사용하기가 쉽지 않은 것에 대한 업데이트 된 답변을 참조하십시오. –

+0

실제로 한 번 암호로 sequesnces를 사용하고 있습니다. 나는 숫자를 사용하고 그것을 증가시킬 수 없으며 그것을 otp로 사용할 수 없다.예, "trng"를 사용한다면이 목적을 무효화 할 수 있습니다. 그러나 난수 생성기를 사용하고 있습니다. – Ashwin

3

다음 줄을 추가 했습니까?

Security.addProvider (new org.bouncycastle.jce.provider.BouncyCastleProvider());

기본 Java 보안에는 Bouncy Castle 구현이 포함되어 있지 않으므로 Bouncy Castle Provider를 사용하기 전에 메모리에서 사용할 수있는 공급자 목록에 Bouncy Castle Provider를 추가해야합니다. 나는 당신이 (가) PRNG 알고리즘으로 "SHA1PRNG"로 난수를 씨앗 .When 클라이언트 (안드로이드)와 서버 (서블릿)에 숫자 같은 sequesnce을 aceive하려고

http://www.java2s.com/Code/Java/Security/SecureRandomSHA1PRNG.htm

+0

당신이 추천하고있는 것을 설명하는 것을 잊지 마십시오. 의견을 보내 주신 덕분에 –

+0

- 사용하기 전에 공급자를 메모리에 추가해야하는 필요성에 대한 선을 추가했습니다. – k2zinger

관련 문제