如何将 Bouncy Castle 算法添加到 Android 中?

2024-01-03

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

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

错误 - 导入 o​​rg.bouncycastle 无法解析;导入期间 错误 - BouncyCastleProvider 无法解析为类型;当调用addProvider时

我虽然 Android 1.6 SDK 中没有提供 bouncycastle,所以考虑单独安装。我应该怎么做? 如果 Bouncycastle 与 SDK 一起提供,我应该怎样做才能避免这些错误? 我在 winXP 上使用 Android 1.6、eclipse-V3.4.0 。 提前致谢


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

既不需要使用 Spongy Castle 也不需要使用不同的包命名空间重新编译 Bouncy Castle,因为 Android 平台上的包名称冲突已在 Honeycomb 中解决(除非您still支持预蜂窝设备)。详细原因请参见:https://github.com/rtyley/spongycastle/issues/34 https://github.com/rtyley/spongycastle/issues/34

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

第一步是在 gradle 文件中包含必要的库。您可以从 Maven 获取标准 Bouncy Castle,无需下载 JAR 并将其签入您的项目。

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

// 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, "[email protected] /cdn-cgi/l/email-protection");
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 file:

-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);

Since MD2不是由任何 Android 内置安全提供程序提供的,只有当您按照上述方式添加 Bouncy Castle 安全提供程序时才会找到它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Bouncy Castle 算法添加到 Android 中? 的相关文章

  • 如何检测和管理来电(Android)?

    我想创建一个应用程序 可以检测来电并在一定数量的蜂鸣声 响铃 后启动我的自定义活动 我的意思是在 2 或 3 或 5 声蜂鸣声 响铃 后我的activity被触发 我该怎么做 Thanks 我认为您无法计算自来电开始以来电话响了多少次 无法
  • 显示警报或收到通知时的视图

    我正在关注this http tokudu com 2010 how to implement push notifications for android 显示的教程通知 on an 安卓设备 当我在设备上运行该应用程序时 状态栏上会出现
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • 连接到不可发现的蓝牙设备

    我正在开发一个安卓应用程序 只是一个一般性问题 是否可以连接到公开不可发现的设备 提前致谢 如果您之前已与该设备配对 则即使该设备未处于可发现模式 也可以再次连接到该设备 参见这篇文章 以编程方式连接到配对的蓝牙设备 https stack
  • 为什么按钮上的 maxWidth 不起作用以及如何解决它?

    我的布局上有两个按钮 在大屏幕设备 平板电脑 上我想限制它们的宽度 这样它们看起来就不会很荒谬 我希望使用 maxWidth 属性 但它显然在我的场景中没有任何作用 这是布局定义 按钮使用布局的整个宽度 忽略 maxWidth 中的任何值
  • android 确定设备是否采用从右到左的语言/布局

    有没有办法确定设备是否使用从右到左的语言 例如阿拉伯语 而不是从左到右的语言 英语 与较旧的 API 级别 低至 10 兼容的东西是必要的 SOLUTION 我最终在接受的答案中使用了 xml 方法 接下来 我还添加了此处指示的代码 以应对
  • 获取可以共享数据的应用程序列表

    此代码显示默认共享对话框 Intent sharingIntent new Intent Intent ACTION SEND sharingIntent setType text html sharingIntent putExtra a
  • 如何从android获取应用程序安装时间

    我尝试了一些方法 但没有成功 请帮助我 PackageManager pm context getPackageManager ApplicationInfo appInfo pm getApplicationInfo app packag
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • 加快 ImageView 中的缩放功能

    我目前正在处理非常大的图像 7 10mb 由于多种原因无法调整大小或压缩 现在 我们的想法是在自定义 ImageView 中显示它们 使用户能够进行双击缩放 捏合缩放等 我使用这个库来完成这项工作 https github com Mike
  • Android 改变 ImageView / Bitmap 的颜色

    我需要找到一种方法来改变 Android 中位图的颜色 我需要在我的应用程序中平滑地替换 更改椭圆形图像的颜色 具体取决于int价值 我需要类似的东西myValue 5比改变我的图像的颜色RED and if myValue 322将颜色更
  • 通过列表视图检查动态生成的复选框时遇到问题

    我知道其他成员已经提出了这个问题 一些成员也给出了解决方案 但问题是我没有找到任何适合我的应用程序的解决方案 我正在创建一个应用程序 其中我有一个屏幕 它将显示动态列表视图 其中包含列表项 复选框和三个文本视图 一个用于候选人姓名 另外两个
  • 如何从 Facebook 邀请好友到 Android 应用程序? - 给出错误

    我正在开发一个 Android 应用程序 我正在努力将 邀请朋友 功能添加到我的应用程序中 它转到我的AppLinkUrl成功但显示错误 我的清单代码如下
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • Android - iphone 风格 tabhost [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在Android中解析xml类型的HTTPResponse

    我有一个 Android 应用程序 我使用 POST 方法来获取响应 这是我的代码 HttpResponse httpResponse httpclient execute httppost HttpEntity resEntity htt
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 在状态栏下方显示DialogFragment内容

    我试图显示高度和宽度均具有 match parent 的 DialogFragment 但碰巧在顶部 DialogFragment 显示在 StatusBar 下方 DialogFragment 正在应用一些默认值来填充底部 右侧 左侧和顶
  • Android ADT Eclipse 插件,parseSDKContent 失败

    我刚刚设置了我的第一个 Android 开发环境 其中包括 日食3 5 Mac OS X 10 5 适用于 x86 mac 的 Android SDK ADT Eclipse 插件 0 9 6 我已将 set PATH 设置为我的 SDK

随机推荐

  • 我可以记住通用方法吗?

    我有 2 个昂贵的通用方法 public T DoStuff
  • 在Python Pillow中设置图像分辨率

    我正在使用 Python Pillow 来修改图像 每当我保存 jpeg 时 内部分辨率都会设置为 72dpi 我想看看如何将其设置为不同的值 我意识到这只是一个数字 在很多方面它毫无意义 我的动机是当我将图像读入 Photoshop 时使
  • 想要在用户单击完成后调用presentingViewController中的方法

    新手 iOS 开发人员在这里使用了一款 iOS 应用程序 我有一个 iOS 应用程序的设置部分 当用户单击 完成 时 我需要模式视图控制器 目前是这样 并且我想在presentingViewController 中调用一个名为 update
  • Swift 4 中的文本到语音转换

    我正在尝试将文本到语音功能集成到我的 iOS 应用程序中 为此我正在使用AVSpeechUtterance and AVSpeechSynthesisVoice类的AVFoundation框架 extension String func s
  • Factory_girl 瞬态属性是什么?我为什么要使用一个?

    I read this https github com thoughtbot factory girl blob master GETTING STARTED md transient attributes来自 Thoughtbot 但它
  • kafka作为微服务中的消息总线可靠吗

    我使用 kafka 作为微服务架构的消息总线 因此多个服务监听一个主题的消息 因此 服务的上线高度依赖于主题 但是 有很多情况我得到leader not available broker not available and leader 1
  • C# 中 Excel 2016 的 oledb 连接字符串

    我一直在尝试使用 C 访问 2016 MS Excel 文件 但连接字符串只能在 2013 MS Excel 之前工作 我当前的连接字符串 提供程序 Microsoft ACE OLEDB 12 0 数据源 c myFolder myExc
  • 如何让 Solr 的拼写检查器忽略大小写?

    如何要求示例拼写检查器忽略大小写 我正在使用中显示的所有默认值demo http wiki apache org solr SpellCheckComponent Spell Checking Analysis 现在我看到如果我输入Anci
  • 如何轻松获取您正在处理的文件的网络路径?

    在 Excel 2003 中 我曾经在工具栏中添加了一个名为 地址 的命令 如果我没记错的话 它将显示我打开的文件的完全限定网络路径 例如 ads IT DEPT DFS data Users someguy somefile xls 当您
  • python 中不同级别的日志记录

    我想做一些我认为很简单的事情 实际上 对于 python 日志记录模块 我对日志记录感兴趣 命令行上的所有内容均处于命令给出的级别 行参数 并以固定的 DEBUG 级别记录到文件 创建两个具有不同级别的不同记录器不起作用 但是 设置添加到根
  • “违反主键约束‘PK_Vehicle_Transactions’。无法在对象‘dbo.Vehicle_Transactions’中插入重复的键”

    我设计了 Webservice api 每次我通过 webservice 推送数据时 这就是我得到的回报 MOV 违反主键约束 PK Vehicle Transactions 无法在对象 dbo Vehicle Transactions 中
  • “RTextTools”create_matrix 出现错误

    我正在运行 RTextTools 包来构建文本分类模型 当我准备预测数据集并尝试将其转换为矩阵时 我收到错误如下 Error in if attr weighting Acronym tf idf weight lt 1e 09 argum
  • 使用 yum 在 Amazon Linux 2 中安装 .NET Core

    我找不到在 AWS Linux 2 AMI 上安装 dotnet 2 2 的直接方法 有一些公告称安装了预构建的 AMI 但我看到的也有不同版本的 MSSQL Server 有没有办法使用 yum 安装 dotnet core 2 2 或在
  • 完全禁用 IPython 输出缓存

    我正在 IPython 中处理一些 GB 大小的 numpy 数组 当我删除它们时 我肯定希望它们消失 以恢复记忆 IPython 的输出缓存在那里非常烦人 因为即使删除了最后一个对象 它仍然使对象保持活动状态 积极意图参考他们 我已经设置
  • 为什么受保护的方法不可见?

    Java 专家 我真诚地感谢任何见解 我的包中有一个带有受保护方法的抽象类 我在同一个包中还有这个类的子类 现在 当我尝试从包外部的类实例化子类 并在子类实例上调用受保护的方法时 Eclipse 抱怨受保护的方法不可见 我认为 受保护的方法
  • 获取 Heroku dynos 的 IP

    我有一个 Heroku 应用程序对外部服务进行一些 API 调用 存在一些问题 服务想要知道哪些 IP 正在发出呼叫 很多基本工具 例如ifconfig traceroute netstat等不存在于机器上 看起来他们正在运行一个非常准系统
  • JUnit5-Jupiter:组合(=“元”)注释无法解析为注释定义

    我定义了自己的 JUnit 注释 ParameterizedTest MethodSource myorg qa ccrtesting DataProviders standardDataProvider Tags Tag ccr Tag
  • RubyMine 错误:无法运行 gem 'rails'。找不到“轨道”

    当我尝试使用 RubyMine 创建 Rails 应用程序时 它失败并显示消息 无法运行 gem rails 找不到 rails 为什么 以及如何解决呢 RubyMine 的版本是 4 0 2 有一些关于我的系统的信息 ruby v rub
  • 如何在空手道中使用 FileUtils?

    需要从编码字符串转换生成PDF并将其保存为pdf以进行比较 示例功能文件 Feature Compute All Scenario trial and error call read common feature def xyz getMD
  • 如何将 Bouncy Castle 算法添加到 Android 中?

    我正在尝试使用 bouncycastle 算法编写一个小应用程序 来自它说我们必须在运行时通过以下代码导入并添加提供程序 import org bouncycastle jce provider BouncyCastleProvider S