java jframe - 안드로이드에 Spongy Castle JAR을 포함시키는 방법?




title color (3)

gradle을 사용하고 있다면 build.gradle 파일에 다음과 같이 의존성을 지정할 수 있습니다.

dependencies {
     ....
    compile 'com.madgag.spongycastle:core:1.54.0.0'
    compile 'com.madgag.spongycastle:prov:1.54.0.0'
    compile 'com.madgag.spongycastle:pkix:1.54.0.0'
    compile 'com.madgag.spongycastle:pg:1.54.0.0'

    }

here 에서 최신 버전의 라이브러리를 찾을 수 있습니다.

앱에 보안 공급자로 삽입하는 것을 잊지 마십시오.

    static {
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}

분명히 Spongy Castle 은 Bouncy Castle의 정식 버전을 사용하는 Android 대안입니다.

그러나 항아리 가져 오기에서 안드로이드에 포함되지 않은 패키지, 주로 javax.mail, javax.activation 및 javax.awt.datatransfer를 사용하기 때문에 모든 종류의 "해결할 수 없습니다"오류가 발생합니다.

그럼이 문제를 해결하는 가장 좋은 방법은 뭔가요? 이 질문이것에 대한 응답은 패키지를 전혀 사용해서는 안되며, 이 대중적인 질문 은 AWT를 다시 얻을 수있는 방법을 찾는 것을 고려하지 않습니다. Spongy Castle은 어떻게 그들에게 의지합니까? 사람들이 스펀지 성을 사용 하고 있습니다.


스폰지 성 (Spongy Castle)을 프로젝트에 포함시키는 방법은 매우 간단합니다.

v1.47 이후 Spongy Castle은 일치하는 Bouncy Castle 유물 (예 : sc-light-jdk15on.jar , scpg-jdk15on.jar 등)을 정확하게 반영하는 별도의 하위 항아리로 분할되었습니다. 당신이하는 일에 필요한 모든 스폰지 성 항아리.

의존성에 대한 전체 정보는 다음에서 찾을 수 있습니다.

http://rtyley.github.com/spongycastle/#downloads

최소한 sc-light-jdk15on.jar (기본 lightweight-API 구현) 및 scprov-jdk15on.jar (lightweight-API를 둘러싼 JCE 래퍼)가 필요합니다. Maven을 사용한다면이 모든 의존성 관리 기능이 당신을 대신해 처리된다.

javax.mail , javax.activation 등에서 설명하는 문제가있는 종속성은 잘못된 jar를 선택할 수 있음을 나타냅니다 (예 : '코어 공급자'가 아닌 모든 단일 라이브러리 구성 요소) - scprov-jdk15on jar에는 이상한 의존성이 전혀 없으며 Android에서 행복하게 실행됩니다.

(면책 조항, 나는 Spongy Castle의 관리자이지만 다른 사용자로부터도 많은 성공 보고서를 받았습니다!)


그것은 복잡하지만 최선을 다해 설명하려고 노력할 것입니다. Java로 시작할 것입니다. 내 토론은 Java 6에 맞춰졌으며 Java 7에서 어떤 것이 변경되었는지는 잘 모르겠습니다.

Java의 내장 암호는 Java Cryptography Extension (JCE)을 통해 사용할 수 있습니다. 이 확장에는 응용 프로그램 API와 서비스 공급자 API의 두 부분이 있습니다. 응용 프로그램 API는 상호 작용하는 부분입니다. 다양한 암호화 클래스의 getInstance() 팩토리 메소드를 사용합니다. 서비스 제공 업체 측면은 평균 프로그래머에게 혼란을줍니다. 그들은 암호가 어떻게 구현되는지 상관하지 않으며, 단지 작동하는 것을 원합니다. 그러나 두드러기에는 실제 작업을 수행하는 암호화 공급자 클래스가 있습니다. getInstance() 에 대한 인수를 보면 원하는 경우 공급자를 지정할 수 있음을 알 수 있습니다. 왜 너는 왜 그러고 싶니? RSA의 최적화 된 상용 구현을 위해 $$$을 (를) 지불 했으므로이를 사용하고 싶을 것입니다. 아마도 한 제공 업체가 FIPS 인증서 나 앱에 필요한 다른 인증을 가지고있을 것입니다. 그런 다음 해당 공급자를 지정합니다. Sun / Oracle 은 Java 환경 에 기본 제공자 세트를 구성하는 여러 제공자로 Java 환경을 제공 합니다. 너무 겹쳐서 역사적인 유물에 다소 혼란 스럽기 때문에 너무 조심스럽게 보지 마십시오. 기본적으로 Oracle Java를 사용할 때 KeyPairGenerator.getInstance("RSA"); 통해 KeyPairGenerator.getInstance("RSA"); 와 같은 일부 암호화를 요청합니다 KeyPairGenerator.getInstance("RSA"); 이러한 공급자 중 하나에서 적절한 클래스 인스턴스를 가져올 것입니다.

다음으로 bouncycastle을 살펴 봅니다. bouncycastle 라이브러리는 두 부분으로 구성됩니다. 하나는 위에 나온 # 2에서 실험 한 API를 가지고있는 고유 한 암호화 라이브러리입니다. 두 번째 부분은이 라이브러리가 JCE의 암호화 제공자로 사용될 수 있도록하는 많은 코드입니다. 즉, bouncycastle 암호화 라이브러리를 사용하는 방법에 대해 프로그래머가 선택할 수 있음을 의미합니다. 위의 # 2에서와 같이 API를 직접 사용할 수 있습니다. 또는 JCE API를 사용할 수도 있지만 Bouncycastle 구현을 명시 적으로 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC"); 와 같이 지정하십시오 KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA", "BC"); .

고유 한 bouncycastle API를 직접 사용하려는 경우 (해당 API는 경량 API라고 함) JCE 제공자로 작동하도록 모든 접착제 코드를 사용할 필요가 없습니다. 이 bouncycastle은 가벼운 API 클래스 만 다운로드 할 수 있습니다.

이제는 마침내 Android의 구현을 살펴 봅니다. Google은 오라클의 Java 소스 코드에 대한 라이선스를 취득하지 않았으므로 오라클의 JCE 공급자가 없었습니다. 그들은 자신의 공급자를 제공해야했습니다. bouncycastle은 모든 코드가 필요하고 오픈 소스 였고 자유 라이센스를 받았기 때문에 Google / Android는 기본 JCE 제공 업체의 기본으로 bouncycastle을 사용하기로 결정했습니다. 그러나 안드로이드는 안드로이드 프로그래머를위한 독특한 경량 API를 제공하기 위해 노력하지 않았습니다. 그들은이 클래스들을 JCE를 통해서만 사용할 것을 기대합니다. 그들은 Bouncycastle 코드를 Android 용으로 수정했습니다. Android에서 직접 가벼운 API를 찾아서 사용할 수 있다는 사실은 실제로 두꺼운 부분에 있다는 사실의 부작용입니다. 그리고 모든 것이 거기에있는 것은 아닙니다. 어떤 사람들은이 상황을 "안드로이드에서 충격이 가라 앉다"라고 묘사했습니다.

Android에서 bouncycastle 라이브러리 의 완전한 기능을 갖춘 버전을 실제로 제공하기 위해 일부 개발자는 Spongycastle 라이브러리 라는 것을 제작했습니다. Android에서 작동 할 수 있도록 바운티 캐슬 라이브러리가 수정 된 것 이상입니다. 가장 큰 변경 사항은 org.bouncycastle.* 에서 org.bouncycastle.* 로 패키지 이름을 변경하여 네임 스페이스 충돌을 방지하는 것입니다.

그렇다면 무엇을 사용해야합니까? 그것은 당신이 원하는 것을, 당신의 이식성이 무엇인지, 당신의 스타일 선호도가 무엇인지, 그리고 당신이 crypto skill level이 무엇인지에 달려 있습니다. 일반적으로이 라이브러리를 사용할 때 암호화 수준은 매우 낮습니다. 당신은 그것을 수행하는 방법에 집중하고 있습니다 (키 전송에 RSA 사용, 메시지 암호화에 AES 사용, 메시지 무결성을위한 HMAC-SHA256 사용 등) 대 무엇을해야합니까 (전자 메일을 통해 암호화 된 메시지를받는 사람에게 보내려합니다. 같은 메커니즘). 분명히, 당신이 직접 문제를 해결하는 더 높은 수준의 라이브러리를 고수 할 수 있다면 가능합니다. 이 라이브러리는 이미 PKCS # 1이 무엇인지 이해하고 더 크고 완전한 프로토콜의 일부로 PKCS # 1을 사용하는 방법을 이해합니다.





java android packages bouncycastle spongycastle