ObjectivePGP 是一个为 iOS 和 macOS 平台实现的 OpenPGP 协议。OpenPGP 是最广泛使用的电子邮件加密标准。它由互联网工程任务组 (IETF) 的 OpenPGP 工作组定义。
这里是 博客文章 的故事。
您想帮忙,太棒了!请继续 fork 我们的仓库,进行更改并向我们发送 pull request。
欢迎您贡献代码。请参阅 CONTRIBUTING.md
请创建 Pull Request。
ObjectivePGP 采用双重许可证
非商业用途免费,受 BSD 许可证变体约束。这意味着您必须注明 Marcin Krzyżanowski 为此代码的原始作者,并在您的应用程序中复制 LICENSE 文本。
商业用途许可证,用于商业产品。请注意,某些免费产品仍然是商业产品。有关详细信息,请通过 电子邮件 与我联系。
不确定如何选择?查看 FAQ
dependencies: [
.package(url: "https://github.com/krzyzanowskim/ObjectivePGP.git", .upToNextMinor(from: "0.99.4"))
]
pod 'ObjectivePGP'
ObjectivePGP 附带最新版本的 Frameworks,您可以复制并嵌入到您的项目中
Objective-C
#import <ObjectivePGP/ObjectivePGP.h>
Swift
import ObjectivePGP
NSArray<PGPKey *> *keys = [ObjectivePGP readKeysFromPath:@"/path/to/key.asc" error:nil];
let keys = try ObjectivePGP.readKeys(fromPath: "/path/to/key.asc")
密钥环是一种存储(在内存中或磁盘上),用于保存各种 PGP 密钥。
PGPKeyring *keyring = ObjectivePGP.defaultKeyring;
PGPKeyring *keyring = [[PGPKeyring alloc] init];
NSArray<PGPKey *> *allKeys = keyring.keys;
[keyring importKeys:@[key]];
[keyring deleteKeys:@[key]];
[keyring importKey:@"979E4B03DFFE30C6" fromPath:@"/path/to/secring.gpg"];
PGPKey *key = [keyring findKeyWithIdentifier:@"979E4B03DFFE30C6"];
NSArray<PGPKey *> keys = [pgp findKeysForUserID:@"Name <email@example.com>"];
let keyring = ObjectivePGP.defaultKeyring
let keyring = Keyring()
let allKeys = keyring.keys
keyring.import(keys: [key])
keyring.delete(keys: [key])
keyring.import(keyIdentifier:"979E4B03DFFE30C6", fromPath:"/path/to/secring.gpg")
if let key = keyring.findKey("979E4B03DFFE30C6") {
// key found in keyring
}
keyring.findKeys("Name <email@example.com>").forEach(key) {
// process key
}
// Write keyring to file
[[keyring export:error] writeToURL:[NSURL fileURLWithString:@"keyring.gpg"]];
// Public keys data
NSData *publicKeys = [keyring exportKeysOfType:PGPKeyTypePublic error:nil];
// Write keyring to file
try keyring.export().write(to: URL(fileURLWithPath: "keyring.gpg"))
// Public keys (Data)
let publicKeys = keyring.exportKeys(of: .public)
使用密钥对数据进行签名
NSData *signature = [ObjectivePGP sign:fileContent detached:YES usingKeys:@[key] passphraseForKey:nil error:nil];
[ObjectivePGP verify:fileContent withSignature:signature usingKeys:@[key] passphraseForKey:nil error:nil];
let signature = try ObjectivePGP.sign(encryptedBin, detached:true, using: [key1])
try ObjectivePGP.verify(encryptedBin, withSignature: signature, using: [key1])
NSData *encrypted = [ObjectivePGP encrypt:fileContent addSignature:YES usingKeys:@[key] passphraseForKey:nil error:nil];
[ObjectivePGP decrypt:encrypted andVerifySignature:YES usingKeys:@[key] passphraseForKey:nil error:nil];
let encrypted = try ObjectivePGP.encrypt(fileContent), addSignature: true, using: [key1, key2])
let decrypted = try ObjectivePGP.decrypt(encrypted, andVerifySignature: true, using: [key1])
PGPKeyGenerator *generator = [[PGPKeyGenerator alloc] init];
PGPKey *key = [generator generateFor:@"Marcin <marcin@example.com>" passphrase:nil];
NSData *publicKeyData = [key export:PGPKeyTypePublic error:nil];
NSData *secretKeyData = [key export:PGPKeyTypeSecret error:nil];
let key = KeyGenerator().generate(for: "marcin@example.com", passphrase: "password")
let publicKey = try key.export(keyType: .public)
let secretKey = try key.export(keyType: .secret)
ASCII 盔甲是一种二进制到文本的编码转换器。ASCII 盔甲涉及将加密消息包裹在 ASCII 中,以便它们可以通过标准消息格式(如电子邮件)发送。
示例
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: For more info see https://www.objectivepgp.org
[...]
-----END PGP PUBLIC KEY BLOCK-----
类 PGPArmor
可用于将二进制格式转换为 ASCII 格式
NSString *armoredKey = [PGPArmor armoredData:encrypted as:PGPArmorPublicKey];
let armoredKey = Armor.armored(Data(), as: .publicKey)
手动转换时,重要的是使用正确的 PGPArmorType
值来定义标头。这可能是一个棘手的部分,所以这里有一个速查表
类型数据 | PGPArmorType | 示例 |
---|---|---|
已加密 | PGPArmorMessage |
Armor.armored(ObjectivePGP.encrypt(...), as: .message) |
已解密 | PGPArmorMessage |
Armor.armored(ObjectivePGP.decrypt(...), as: .message) |
公钥 | PGPArmorTypePublic |
Armor.armored(key.export(), as: .publicKey) |
私钥 | PGPArmorTypeSecret |
Armor.armored(key.export(), as: .secretKey) |
对于任何加密结果,类型都是 PGPArmorMessage
请参阅 CHANGELOG
已知限制
迄今为止,ObjectivePGP 代码库已接受来自 Cure53 的完整安全审计。
本产品使用由 OpenSSL 项目开发的软件,用于 OpenSSL 工具包。(http://www.openssl.org/)