Как зашифровать / расшифровать сообщение PGP в Objective-C, используя OpenPGP.js

Я хочу зашифровать сообщение с помощью бронированного ключа. Я хочу сделать это с помощью OpenPGP.js.

2 ответа

Я отвечаю на свой вопрос. Я понял это некоторое время назад и хотел поделиться, так как я не мог найти ничего подобного.

Вот как должно выглядеть шифрование:

+ (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.

Другие вопросы по тегам