在iOS应用中创建PGP密钥

时间:2013-11-17 20:57:05

标签: ios bouncycastle pgp openpgp

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

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

我在JAVA中使用带有弹性城堡和OpenPGP的RSA算法实现了后端和Android版本,但是我需要对iOS版本做同样的事情。这意味着在iOS中创建的密钥应采用相同的格式,并与Android版本中创建的密钥兼容。

4 个答案:

答案 0 :(得分:3)

查看这些项目:UNNetPGPObjectivePGP,这可能会为您完成这项工作。

答案 1 :(得分:1)

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

其中一个选择是在iOS上使用我们的SecureBlackbox(C ++版本) - 它提供全方位的OpenPGP功能,包括密钥生成和管理。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

如果您真的真的需要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功能,否则可能会带来额外的复杂性,使其变得不值得使用,尤其是美国出口合规部。