YFEncrypt
示例
要运行示例项目,请克隆仓库,然后首先从示例目录中运行 pod install
。
要求
最低 iOS 目标是 iOS 10。
安装
YFEncrypt 通过 CocoaPods 提供。要安装它,只需将以下行添加到 Podfile 中即可。
pod 'YFEncrypt'
用法
哈希
MD5
NSLog(@"%@", [@"hello, world!" yf_md5String]);
Hmac SHA512
YFHashEncrypt *encryptor = [[YFHashEncrypt alloc] initWithType:YFHashTypeSHA512];
encryptor.contentData = [@"hello, world!" dataUsingEncoding:NSUTF8StringEncoding];
encryptor.keyData = [@"hmac key" dataUsingEncoding:NSUTF8StringEncoding];
NSString *result = [encryptor getHashString];
NSLog(@"result: %@", result);
文件 SHA256
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"private" ofType:@"pem"];
YFHashEncrypt *encryptor = [[YFHashEncrypt alloc] initWithType:YFHashTypeSHA256];
encryptor.filePath = filePath;
NSString *fileResult = [encryptor getHashString];
NSLog(@"fileResult: %@", fileResult);
对称加密
// random key
NSData *aes256KeyData = [NSData yf_randomDataWithLength:32];
NSString *aesKey = [aes256KeyData yf_base64Encode];
NSLog(@"aesKey: %@", aesKey);
NSString *testString = @"hello, world!";
YFSymmetricEncrypt *encryptor = [[YFSymmetricEncrypt alloc] initWithType:YFSymmetricEncryptTypeAES];
// encryption
NSData *resultData = [encryptor operationData:[testString dataUsingEncoding:NSUTF8StringEncoding] keyData:aes256KeyData isEncrypt:YES];
NSLog(@"encryptResult: %@", [resultData yf_base64Encode]);
NSString *result = [encryptor encryptString:testString withKey:aesKey];
NSLog(@"encryptResult: %@", result);
result = [testString yf_AESEncryptByKey:aesKey];
NSLog(@"encryptResult: %@", result);
// decryption
NSData *decryptData = [encryptor operationData:resultData keyData:aes256KeyData isEncrypt:NO];
NSLog(@"decryptResult: %@", [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding]);
decryptData = [encryptor decryptString:result withKey:aesKey];
NSLog(@"decryptResult: %@", [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding]);
decryptData = [result yf_AESDecryptByKey:aesKey];
NSLog(@"decryptResult: %@", [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding]);
RSA
获取密钥字符串和加密
- (void)verifyRSAEncrypt:(YFRSAEncrypt *)encryptor {
NSLog(@"public key: %@", [encryptor getPublicKey]);
NSLog(@"private key: %@", [encryptor getPrivateKey]);
NSString *result = [encryptor encryptData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding] isPublicKey:YES];
NSLog(@"encryptResult: %@", result);
NSData *decryptData = [encryptor decryptString:result isPublicKey:NO];
NSLog(@"decryptResult: %@", [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding]);
}
加载 P12 和 DER 文件
YFRSAEncrypt *encryptor = [[YFRSAEncrypt alloc] init];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"p" ofType:@"p12"];
[encryptor loadP12File:filePath password:@"123456"];
filePath = [[NSBundle mainBundle] pathForResource:@"rsacert" ofType:@"der"];
[encryptor loadDerFile:filePath];
[self verifyRSAEncrypt:encryptor];
加载密钥字符串
NSString *privateKey = @"-----BEGIN RSA PRIVATE KEY-----MIICXgIBAAKBgQDKM1liWihMQvCSme8KOgYJk7LoU/pzih1V6137ual1M4UxGmVLHYxiQ4P7DP8bwIAxN0D+NEFeDUi1lcDvzlQR83P8h6JzT777YwRDUPf7EAeTiwrV80UP2w01mO5DLCScszQ8Y9cJV76wJEAJI4Jf/SyX90So1j1y6gbvDDNi7wIDAQABAoGAEZFQjMkEg0u1lyckq6DK8X4RpznUosE3N0XRzpMc8//b7J48esBAeDEhgGhqqcCZ4qzISs3DeCZzUMOIFc25ZAZX5BVpBVdLYxHRvSgoIZIxy+IQ0Xy69ARFwYWsWTfxlXpC8VUPiU1FkNsKRjvUxL+IpOuDAsDyTByboS4MLjECQQDkpMaOi5qg7YSWxAXXNRE/ihu06CYWzl8VQ6TtrjLXnK+03aZIZIj4h7in1nWExRlSBR6IyGiIvvAxuvz5hipzAkEA4mSjKpXHUHXR6/TBCDm1d3+faDkBzEIk5KPO6zBJr349kW1aq6N9ulqRq5G2mApPjpZTB3Do0DCAynjTJ78alQJBAK82jmpCFTbpjUez4/3tTtBwV5ckp7umXjr/YW46pf+QtR1XFcw4Lra12w3TTK94E1VFUwbi/Sh9mbeiYaYd6H0CQQCNvD/C+36LSxgfx13Kjoajx8y+7WHIxWhflIaJC/Q14K0fDP2FE5g1QVqNtW5BhcMFG+vjbrbzEEqxeC+KZMR5AkEAqpIHukvTttU5EsR/wYm0+C11kIevsLRsiGZ7Me/JB2KjmmtOCMxxF/Vm+uwlL4j4xBO+LsaIRfHCtmB6l/YtXA==-----END RSA PRIVATE KEY-----";
NSString *publicKey = @"-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDKM1liWihMQvCSme8KOgYJk7LoU/pzih1V6137ual1M4UxGmVLHYxiQ4P7DP8bwIAxN0D+NEFeDUi1lcDvzlQR83P8h6JzT777YwRDUPf7EAeTiwrV80UP2w01mO5DLCScszQ8Y9cJV76wJEAJI4Jf/SyX90So1j1y6gbvDDNi7wIDAQAB-----END PUBLIC KEY-----";
YFRSAEncrypt *encryptor = [[YFRSAEncrypt alloc] init];
[encryptor loadPublicKey:publicKey];
[encryptor loadPrivateKey:privateKey];
[self verifyRSAEncrypt:encryptor];
加载 Pem 文件
YFRSAEncrypt *encryptor = [[YFRSAEncrypt alloc] init];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"private" ofType:@"pem"];
[encryptor loadPrivateKeyFromPemFile:filePath];
filePath = [[NSBundle mainBundle] pathForResource:@"public" ofType:@"pem"];
[encryptor loadPublicKeyFromPemFile:filePath];
[self verifyRSAEncrypt:encryptor];
生成密钥对
YFRSAEncrypt *encryptor = [[YFRSAEncrypt alloc] init];
[encryptor generateKeyPair:1024];
[self verifyRSAEncrypt:encryptor];
作者
许可证
YFEncrypt 可在 MIT 许可证下使用。有关更多信息,请参阅 LICENSE 文件。