我想使用装甲密钥加密消息。我想使用 OpenPGP.js 来完成这项工作。
问问题
687 次
2 回答
0
但是,如果您只想在没有 javascript 桥的情况下进行加密,您可能想尝试一下ObjectivePGP库。
于 2014-08-01T09:20:53.810 回答
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 很浪费,但它更安全,因为一旦结果返回它的上下文,它就会超出范围。请记住,我不是安全人员,所以请谨慎对待。
我希望这可以帮助别人。
于 2014-07-28T15:47:25.433 回答