Как зашифровать / расшифровать сообщение 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.