gpt4 book ai didi

android - 如何在Android中添加Bouncy CaSTLe算法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:28:32 25 4
gpt4 key购买 nike

我正在尝试使用 bouncycaSTLe 算法编写一个小型应用程序,来自 BouncyCastleProvider.java它说我们必须在运行时通过以下代码导入和添加提供程序

导入 org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider;Security.addProvider(new BouncyCaSTLeProvider());

错误 - 导入 o​​rg.bouncycaSTLe 无法解析;进口期间错误 - BouncyCaSTLeProvider 无法解析为类型;调用 addProvider 时

虽然 bouncycaSTLe 没有随 Android 1.6 SDK 提供,所以想到单独安装。我该怎么做?如果 BouncycaSTLe 是随 SDK 一起提供的,我应该怎么做才能避免这些错误?我在 winXP 上使用 Android 1.6, eclipse-V3.4.0。提前致谢

最佳答案

这些答案在 2021 年甚至几年前都不准确。

既不需要使用 Spongy CaSTLe,也不需要使用不同的包命名空间重新编译 Bouncy CaSTLe,因为 Android 平台上的包名称冲突已在 Honeycomb 中解决(除非您仍然支持 pre-honeycomb 设备)。详情请见:https://github.com/rtyley/spongycastle/issues/34

正确的解决方案是在您的 Android 应用程序中包含标准的 Bouncy CaSTLe 库,如下所示。

第一步是在您的 gradle 文件中包含必要的库。您可以从 maven 获得标准的 Bouncy CaSTLe,无需下载 JAR 并将其 checkin 到您的项目中。

使用 gradle 构建时,将以下内容添加到 gradle 项目文件中的 dependencies 部分:

// See https://www.bouncycastle.org/releasenotes.html for latest revision
implementation 'org.bouncycastle:bcpkix-jdk15to18:1.68'
implementation 'org.bouncycastle:bcprov-jdk15to18:1.68'

根据您的需要,您可能不需要从正式发布的 Bouncy CaSTLe 实际添加 Java 安全提供程序。如果您只想直接使用 Bouncy CaSTLe 类,现在就可以这样做。例如,我可以编写构建 X500Name 对象的代码,而无需安装安全提供程序:

X500NameBuilder nameBuilder = new X500NameBuilder();
nameBuilder.addRDN(BCStyle.PSEUDONYM, "xyz");
nameBuilder.addRDN(BCStyle.E, "e@example.com");
X500Name name = nameBuilder.build();

另一方面,如果您想编写通过安全提供程序利用 Bouncy CaSTLe 的代码,那么您应该首先将内置的 Android Bouncy CaSTLe 安全提供程序替换为标准安全提供程序,因为 Java 不允许两个安全提供程序具有同名。这应该在应用程序启动期间尽早完成:

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class MyApplication extends Application {
static {
Security.removeProvider("BC");
// Confirm that positioning this provider at the end works for your needs!
Security.addProvider(new BouncyCastleProvider());
}
}

请注意,Java 安全提供程序在很大程度上依赖于反射。如果您正在使用混淆或缩小您的项目,那么 Bouncy CaSTLe 类将结束被剔除或不恰本地重命名,以防止您需要向 proguard.pro 文件添加以下或类似内容:

-keep class org.bouncycastle.jcajce.provider.** { *; }
-keep class org.bouncycastle.jce.provider.** { *; }

最后,您可以编写将在后台使用标准 Bouncy CaSTLe 安全提供程序的代码:

// MD2 hash is not secure, just demonstrating...
MessageDigest md = MessageDigest.getInstance("MD2");
byte[] messageDigest = md.digest(byteData);

由于 MD2 不是由任何 Android 内置安全提供程序提供的,因此只有在您如上所述添加了 Bouncy CaSTLe 安全提供程序后才能找到它。

关于android - 如何在Android中添加Bouncy CaSTLe算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com