我正在开始使用ECC密码学开发Android应用。我已经看到Android嵌入了一些密码术(在https://developer.android.com/guide/topics/security/cryptography中定义),但是它在受支持的算法参数方面或与受支持的Android API版本有关。例如,AlgorithmParameters类仅在具有严格限制的Android API版本26 +(= Android 8.0及更高版本)上支持“ EC”参数(又名椭圆曲线加密)。
到目前为止,解决方案是使用“ Bouncy Castle”之类的JCE提供程序。但是,我在https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html上看到,它将在未来的Android P上弃用。AndroidP将使用Conscrypt中提供的加密功能(基于boringSSL)。
我希望我的应用程序可以在当前的Android版本(> = API 21)上运行,并且希望它在Android P上运行。那我应该使用哪种JCE提供程序?
我曾尝试将 Conscrypt 与运行Android API版本24(= Android 7.0)的Samsung Galaxy S7配合使用,但是将其安装为安全提供程序时出现崩溃。 在我的MainActivity.java类中,我使用了:
static {
try {
Security.insertProviderAt(Conscrypt.newProvider(), 1);
} catch (NoClassDefFoundError e) {
e.printStackTrace();
}
}
我遇到以下崩溃:
java.lang.UnsatisfiedLinkError:未找到java.lang.String [] org.conscrypt.NativeCrypto.get_cipher_names(java.lang.String)的实现(尝试使用Java_org_conscrypt_NativeCrypto_get_1cipher_1名称和Java_org_conscrypt_NativeClang_get_1 ) >
您知道Conscript是否可以与当前的Android API版本一起使用吗? 谢谢
答案 0 :(得分:2)
我收到了专门针对Conscrypt的GoogleGroup的答复。 Conscrypt文档缺少一些有关如何在Android上使用它的说明(现已修复)。在Android上,App / build.gradle应该包含:
compile 'org.conscrypt:conscrypt-android:1.1.4'
我有一个“ java.lang.UnsatisfiedLinkError”,因为我正在使用:
compile 'org.conscrypt:conscrypt-openjdk:1.1.3:'
这是错误的,因为此行用于OpenJDK。
更多信息:有人告诉我,Android上的Conscrypt可以追溯到API级别9(姜饼)。
答案 1 :(得分:0)
当前的Android版本包括Bouncycastle的简化版本,并且不完全支持椭圆曲线密码术。
我不知道Android P是否将支持ECC算法,但是目前最实用的解决方案是分发包含BouncyCastle软件包的应用程序,而不依赖于Android本身的支持
答案 2 :(得分:0)
通过添加以下依赖项,最新版本的 Bouncy Castle 库可用于面向 Android 3.0(API 11)以上的应用程序。
implementation "org.bouncycastle:bcprov-jdk15to18:1.68"
implementation "org.bouncycastle:bcpkix-jdk15to18:1.68"
<块引用>
注意:请参阅 Provider、PKIX 以获取最新版本的详细信息。
使用以下行将 Android OS Bouncycastle 提供程序替换为添加的库中的提供程序。
// Remove the OS provided bouncy castle provider
Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME)
// Add the bouncy castle provider from the added library
Security.addProvider(org.bouncycastle.jce.provider.BouncyCastleProvider())