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

How to encrypt/decrypt a PGP message in Objective-C using OpenPGP.js

本文关键字:加密 js 解密 消息 PGP OpenPGP Objective-C      更新时间:2023-09-26

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

我在回答自己的问题。我在一段时间前发现了这个问题,并想分享,因为我找不到类似的东西。

加密应该是这样的:

+ (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只是一个加密轮,它是更安全的,因为它会掉出范围,只要结果与它的上下文返回。请记住,我不是保安人员,所以请将信将疑。

然而,如果你只是想加密没有javascript桥,你可能想给一个尝试的ObjectivePGP库。