首页 > 解决方案 > 在 Android 上使用哪个 JCE 提供程序?充气城堡,Conscrypt,...?

问题描述

我正在开始使用 ECC 加密技术开发 Android 应用程序。我已经看到 Android 嵌入了一些密码学(在此处定义https://developer.android.com/guide/topics/security/cryptography),但它在支持的算法参数或支持的 Android API 版本方面受到限制。例如,AlgorithmParameters 类仅支持“EC”参数(又名椭圆曲线加密),仅适用于 Android API 版本 26+(= Android 8.0 及更高版本),这是非常严格的。

到目前为止,解决方案是使用像“Bouncy Castle”这样的 JCE 提供程序。但是,我在https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html上看到它将在未来的 Android P 中弃用。Android P 将使用加密Conscrypt 中可用的功能(基于boringSSL)。

我希望我的应用程序可以在当前的 Android 版本(>= API 21)上运行,并且我希望它可以在 Android P 上运行,那么我应该使用哪个 JCE 提供程序?

我曾尝试将Conscrypt与运行 Android API 版本 24(= Android 7.0)的三星 Galaxy S7 一起使用,但是当我将其安装为安全提供程序时发生了崩溃。在我的 MainActivity.java 类中,我使用了:

static {
    try {
        Security.insertProviderAt(Conscrypt.newProvider(), 1);

    } catch (NoClassDefFoundError e) {
        e.printStackTrace();
    }
}

我收到以下崩溃:

java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String[] org.conscrypt.NativeCrypto.get_cipher_names(java.lang.String) (试过 Java_org_conscrypt_NativeCrypto_get_1cipher_1names 和 Java_org_conscrypt_NativeCrypto_get_1cipher_1names__Ljava_lang_String_2)

你知道 Conscript 是否可以与当前的 Android API 版本一起使用?

谢谢

标签: javaandroidbouncycastlejceboringssl

解决方案


我收到了来自致力于 Conscrypt 的 GoogleGroup 的答复。Conscrypt 文档缺少一些关于如何在 Android 上使用它的说明(现在已修复)。在 Android 上, App/build.gradle 应该包含:

implementation 'org.conscrypt:conscrypt-android:2.5.1' 

我有一个“java.lang.UnsatisfiedLinkError”,因为我正在使用:

compile 'org.conscrypt:conscrypt-openjdk:1.1.3:'

这是错误的,因为这一行是针对 OpenJDK 的。

关于更多的事情:有人告诉我,Android 上的 Conscrypt 可以追溯到 API 级别 9(Gingerbread)。

谷歌 GitHub 链接:https ://github.com/google/conscrypt


推荐阅读