AeroGear-Crypto 0.2.3

AeroGear-Crypto 0.2.3

测试已测试
语言语言 Objective-CObjective C
许可证 Apache 2
发布日期最新发布2017年10月

corinne krychJulio CesarDaniel PassosMassimiliano Ziccardi维护。



  • 红帽公司

aerogear-crypto-ios Build Status

项目目标

"面向人类的加密技术"

项目目标是提供对 iOS 平台进行高级加密技术的有用且易于使用的 API 接口。任何尝试使用 iOS 提供的底层加密功能 API 或与外部加密库(如 OpenSSL)集成的用户,都可以理解这种体验是多么令人沮丧。原因有两个。首先,所有加密库都提供各种加密原语,您需要就使用哪些特定的组件做出大量决定。如果您的决定是错误的,最终结果将是不可靠的系统。其次,大多数库都是用 C 语言编写的(有很好的理由),但这对于 Objective-C 开发者(对于不熟悉者可能具有潜在的负面和危险的后果)来说是非常繁琐的。

通过利用最先进的NaCl加密库,提供了非常强大的加密原语,因此开发人员无需担心选择“正确”的库,同时提供易于使用与平台内置的 Security 和 CommonCrypto 服务的接口,我们相信加密可以成为一个从令人沮丧的体验变成令人愉悦的体验。

我们明白,应用良好的加密技术并非易事,需要深入了解底层概念。但我们坚信,“更友好”的开发者接口可以缓解这种痛苦。

该项目与我方的兄弟 AeroGear 项目AeroGear-Crypto-Java拥有相同的愿景。如果您是一名 Java 开发者,我们强烈建议查看该项目。

该项目也是为AeroGear-IOS库项目提供加密服务的基石。

要求

  • iOS 7 或更高版本

Podfile

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上找到开发者,随时加入讨论。我们期待您的反馈!