测试已测试 | ✗ |
语言语言 | Objective-CObjective C |
许可证 | Apache 2 |
发布日期最新发布 | 2017年10月 |
由corinne krych、Julio Cesar、Daniel Passos、Massimiliano Ziccardi维护。
"面向人类的加密技术"
项目目标是提供对 iOS 平台进行高级加密技术的有用且易于使用的 API 接口。任何尝试使用 iOS 提供的底层加密功能 API 或与外部加密库(如 OpenSSL)集成的用户,都可以理解这种体验是多么令人沮丧。原因有两个。首先,所有加密库都提供各种加密原语,您需要就使用哪些特定的组件做出大量决定。如果您的决定是错误的,最终结果将是不可靠的系统。其次,大多数库都是用 C 语言编写的(有很好的理由),但这对于 Objective-C 开发者(对于不熟悉者可能具有潜在的负面和危险的后果)来说是非常繁琐的。
通过利用最先进的NaCl加密库,提供了非常强大的加密原语,因此开发人员无需担心选择“正确”的库,同时提供易于使用与平台内置的 Security 和 CommonCrypto 服务的接口,我们相信加密可以成为一个从令人沮丧的体验变成令人愉悦的体验。
我们明白,应用良好的加密技术并非易事,需要深入了解底层概念。但我们坚信,“更友好”的开发者接口可以缓解这种痛苦。
该项目与我方的兄弟 AeroGear 项目AeroGear-Crypto-Java拥有相同的愿景。如果您是一名 Java 开发者,我们强烈建议查看该项目。
该项目也是为AeroGear-IOS库项目提供加密服务的基石。
pod "AeroGear-Crypto", '0.2.3'
以下是目前提供的服务
AGPBKDF2 *pbkdf2 = [[AGPBKDF2 alloc] init];
NSData *rawKey = [pbkdf2 deriveKey:@"passphrase"];
//Generate the key
AGPBKDF2 *pbkdf2 = [[AGPBKDF2 alloc] init];
NSData *privateKey = [pbkdf2 deriveKey:@"passphrase"];
//Initializes the secret box
AGSecretBox *secretBox = [[AGSecretBox alloc] initWithKey:privateKey];
//Encryption
NSData *nonce = [AGRandomGenerator randomBytes:32];
NSData *dataToEncrypt = [@"My bonnie lies over the ocean" dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipherData = [secretBox encrypt:dataToEncrypt nonce:nonce];
//Decryption
AGSecretBox *pandora = [[AGSecretBox alloc] initWithKey:privateKey];
NSData *message = [secretBox decrypt:cipherData nonce:nonce];
//Create a new key pair
AGKeyPair *keyPairBob = [[AGKeyPair alloc] init];
AGKeyPair *keyPairAlice = [[AGKeyPair alloc] init];
//Initializes the crypto box
AGCryptoBox *cryptoBox = [[AGCryptoBox alloc] initWithKey:keyPairAlice.publicKey privateKey:keyPairBob.privateKey];
NSData *nonce = [AGRandomGenerator randomBytes:32];
NSData *dataToEncrypt = [@"My bonnie lies over the ocean" dataUsingEncoding:NSUTF8StringEncoding];
NSData *cipherData = [cryptoBox encrypt:dataToEncrypt nonce:nonce];
//Create a new box to test end to end asymmetric encryption
AGCryptoBox *pandora = [[AGCryptoBox alloc] initWithKey:keyPairBob.publicKey privateKey:keyPairAlice.privateKey];
NSData *message = [pandora decrypt:cipherData nonce:nonce];
// create an SHA256 hash
AGHash *agHash = [[AGHash alloc] init:CC_SHA256_DIGEST_LENGTH];
NSData *rawPassword = [agHash digest:@"My bonnie lies over the ocean"];
// create an SHA512 hash
AGHash *agHash = [[AGHash alloc] init:CC_SHA512_DIGEST_LENGTH];
NSData *rawPassword = [agHash digest:@"My bonnie lies over the ocean"];
NSData *message = [@"My bonnie lies over the ocean" dataUsingEncoding:NSUTF8StringEncoding];
AGSigningKey *signingKey = [[AGSigningKey alloc] init];
AGVerifyKey *verifyKey = [[AGVerifyKey alloc] initWithKey:signingKey.publicKey];
// sign the message
NSData *signedMessage = [signingKey sign:message];
// should detect corrupted signature
NSMutableData *corruptedSignature = [NSMutableData dataWithLength:64];
BOOL isValid = [verifyKey verify:message signature:signedMessage];
// isValid should be YES
BOOL isValid = [verifyKey verify:message signature:corruptedSignature];
// isValid should be NO
NSData *random = [AGRandomGenerator randomBytes 贝壳找房];
项目的持续工作记录在项目的 [JIRA](https://issues.jboss.org/browse/AGIOS) 问题追踪器上,以及在我们 邮件列表 上。您也可以在IRC上找到开发者,随时加入讨论。我们期待您的反馈!