【问题标题】:Creating PGP keys in iOS app在 iOS 应用中创建 PGP 密钥
【发布时间】:2013-11-17 20:57:05
【问题描述】:

我需要构建一个 iOS 应用程序,其中将创建 PGP 密钥以加密和解密某些消息。

由于我是 iOS 中 PGP 加密的新手,是否有一些库可以让我创建、保存和访问 PGP 密钥以及使用密钥进行加密和解密。

我已经在 J​​AVA 中使用带有充气城堡和 OpenPGP 的 RSA 算法实现了后端和 Android 版本,但是我需要对 iOS 版本执行相同的操作。这意味着在 iOS 中创建的密钥格式应该与在 Android 版本中创建的密钥格式相同。

【问题讨论】:

  • 当您说“密钥应该兼容”时,您指的是公钥还是私钥?
  • 私钥和公钥应该兼容。我正在使用基于充气城堡的 RSA 2048 位密钥并在 Android 应用中打开 PGP。

标签: ios bouncycastle pgp openpgp


【解决方案1】:

查看以下项目:UNNetPGPObjectivePGP,这可能适合您。

【讨论】:

  • 我已经集成了ObjectivePGP。当我尝试将密钥字符串转换为 PGPKey 时,它的给定为零。因此,我的应用程序崩溃了。你能帮我转换一下吗?
【解决方案2】:

OpenPGP 密钥具有 RFC 4880 中定义的标准格式(两种格式 - 二进制和 base64 编码)。据我所知,BouncyCastle 可以创建一些自定义非标准格式的键。

其中一种选择是在 iOS 上使用我们的 SecureBlackbox(C++ 版本)——它提供了包括密钥生成和管理在内的全部 OpenPGP 功能。

【讨论】:

    【解决方案3】:

    如果您真的需要 Bouncy Castle 原样,请考虑使用 j2objc

    我们最近遇到了同样的情况,到目前为止,我们很幸运地使用 j2objc 将 Bouncy Castle 和使用它的代码都转换为 Objective C。我们需要 iOS 和 Android 版本的应用程序之间具有很强的兼容性,并且不想冒险发现与我们的解决方案不兼容。

    为了转换 Bouncy Castle,我们必须删除一些与 LDAP 相关的类(无论如何我们都不需要),但除此之外它非常简单。我们通过反复试验来做到这一点,查看它无法转换的内容,然后删除文件并重试。

    使用 j2objc 还具有让我们移植大量业务逻辑并避免在 Swift/Objective-C 中重新实现它的优势。我们刚刚在 Swift 中为我们需要直接使用的类创建了一些简单的包装器,并在整个应用程序中使用它们。

    重要警告

    值得注意的是,这并不是适合所有人的解决方案,正如this comment on an issue 中提到的那样,以这种方式使用 Bouncy Castle 可能会产生一些后果,因此请确保您知道自己在做什么。在了解潜在的 Java 类路径问题和弄清楚如何引入和转换您需要的所有内容(理想情况下使用 shell 脚本或类似的东西来自动化更新时的过程)之间,这也是需要时间和专业知识的设置.

    因此,除非您使用大量 Bouncy Castle 功能,否则这可能会带来额外的复杂性,使其不值得,尤其是美国出口合规部分。

    【讨论】:

      【解决方案4】:

      我只是粗略地搜索了一下(我想你可能也做过),我找到了"GPGTools" project,它基本上是一个开源 OpenPGP 实现。

      并且由于它是从 OpenPGP 派生的,因此您创建的密钥应该与在 Android 端创建的密钥兼容。他们有一个OLD (circa 2011) project page here,但当前代码(处于不断变化的状态)可以是found on GitHub

      【讨论】:

      • 感谢迈克尔的回复。我看了看,但这对我没有帮助,因为它不是原生 iOS(Objective C)项目。
      猜你喜欢
      • 2021-09-04
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 2012-05-25
      • 2011-02-17
      • 1970-01-01
      相关资源
      最近更新 更多