如何使用 OpenPGP.js 在 Objective-C 中加密/解密 PGP 消息

Posted

技术标签:

【中文标题】如何使用 OpenPGP.js 在 Objective-C 中加密/解密 PGP 消息【英文标题】:How to encrypt/decrypt a PGP message in Objective-C using OpenPGP.js 【发布时间】:2014-07-28 15:47:25 【问题描述】:

我想使用加密密钥加密消息。我想使用 OpenPGP.js 来完成。

【问题讨论】:

关于ASCII Armor的信息可以在RFC4880 section-6.2找到 【参考方案1】:

我正在回答我自己的问题。不久前我想出了这个并想分享,因为我找不到类似的东西。

下面是加密的样子:

+ (NSString *)encryptMessage:(NSString *)message
                  forKey:(NSString *)key 
NSString *result = nil;

UIWebView *webView = [[UIWebView alloc] init];

NSString *path = [[NSBundle mainBundle] pathForResource:@"openpgp" ofType:@"js"];
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSString *resultOfPGPLibEval = [webView stringByEvaluatingjavascriptFromString:content];
if ([resultOfPGPLibEval isEqualToString:@"true"]) //library was loaded successfully
    JSContext *context =  [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; // Undocumented access
    context[@"key"] = key;
    context[@"message"] = message;
    [context evaluateScript:@"var openpgp = window.openpgp; var publicKey = openpgp.key.readArmored(key);var pgpMessage = openpgp.encryptMessage(publicKey.keys, message);"];
    JSValue *val2 = context[@"pgpMessage"];
    result = val2.toString;


return result;

请注意,您必须在包中包含 OpenPGP 库,在本示例中,它被命名为“openpgp.js”。此外,此示例中的钥匙是装甲的,因此请记住这一点。

我觉得虽然只为一轮加密创建一个 WebView 很浪费,但它更安全,因为一旦结果返回它的上下文,它就会超出范围。请记住,我不是安全人员,所以请谨慎对待。

我希望这对某人有所帮助。

【讨论】:

【参考方案2】:

但是如果你只是想在没有 javascript 桥的情况下加密,你可能想试试ObjectivePGP library。

【讨论】:

以上是关于如何使用 OpenPGP.js 在 Objective-C 中加密/解密 PGP 消息的主要内容,如果未能解决你的问题,请参考以下文章

OpenPGP协议的一个JavaScript实现:OpenPGP.js

无法使用 OpenPGP.js 解密未装甲的 pgp 文件:会话密钥解密失败

无法加密 OpenPGP.js 中的字符串

Openpgp.js无法解密pgp消息

如何在Spring中为字段返回不同的值

如何使用 jQuery 获取 -webkit-transition-duration 属性?