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

时间:2014-07-28 15:47:25

标签: javascript ios objective-c openpgp

我想使用装甲密钥加密邮件。我想用OpenPGP.js完成这个。

2 个答案:

答案 0 :(得分:0)

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

以下是加密的样子:

+ (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,但它更安全,因为一旦结果返回它的上下文就会超出范围。请记住,我不是一个安全人员,所以请你带着一点点盐。

我希望这有助于某人。

答案 1 :(得分:0)

但是,如果您只想在没有javascript桥接的情况下进行加密,则可能需要尝试ObjectivePGP库。