Objective-C AES加解密
来源:互联网 发布:java textarea 滚动条 编辑:程序博客网 时间:2024/05/16 01:49
在线加解密:https://blog.zhengxianjun.com/online-tool/crypto/aes/
一、AES简介
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法。AES是一个对称分组密码算法,旨在取代DES成为广泛使用的标准。根据使用的密码长度,AES最常见的有3种方案,用以适应不同的场景要求,分别是AES-128、AES-192和AES-256。
二、算法描述
=AES算法较为复杂这里不再赘述,如有兴趣可点击描述出处查看更多资料。三、算法实现
@implementation CATSecurity#pragma mark --#pragma mark -- AES/** * get data's aes256 encrypt data * * @param data source data * @param key key for encrypt/decrypt !!!key length must be 16 * * @return aes256 encrypt data */+(NSData *)aes256EncryptWithData:(NSData *)data key:(NSString *)key{ if (!key || key.length !=16) { NSLog(@"key length must be 16"); return nil; } char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = data.length; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, data.bytes, dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); return nil;}/** * get source data from aes256 encrypt data * * @param data aes256 encrypt data * @param key key for encrypt/decrypt !!!key length must be 16 * * @return source data */+(NSData *)aes256DecryptWithData:(NSData *)data key:(NSString *)key{ if (!key || key.length !=16) { NSLog(@"key length must be 16"); return nil; } char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = data.length; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, data.bytes, dataLength, buffer, bufferSize, &numBytesDecrypted); if (cryptStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); return nil;}/** * get string's aes256 encrypt data * * @param string source string * @param key key for encrypt/decrypt !!!key length must be 16 * * @return aes256 encrypt data */+(NSData*)aes256EncryptWithString:(NSString*)string key:(NSString *)key{ if (!key || key.length !=16) { NSLog(@"key length must be 16"); return nil; } NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; NSData *encryptedData = [self aes256EncryptWithData:data key:key]; return encryptedData;}/** * get source string from aes256 encrypt data * * @param data aes256 encrypt data * @param key key for encrypt/decrypt !!!key length must be 16 * * @return source string */+(NSString*)aes256DecryptStringWithData:(NSData *)data key:(NSString *)key{ if (!key || key.length !=16) { NSLog(@"key length must be 16"); return nil; } NSData *decryData = [self aes256DecryptWithData:data key:key]; NSString *string = [[NSString alloc] initWithData:decryData encoding:NSUTF8StringEncoding]; return string;}@end
四、补充
由于iOS、java的平台差异,AES的加密算法存在兼容性问题(iOS的AES Padding只支持ccPKCS7Padding, ccNoPadding),为了使用方便,我找了一份可兼容的Java的代码并做了测试,详见工程的java目录。
作者:CatchZeng
链接:http://www.jianshu.com/p/1247e946c61f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
0 0
- Objective-C AES加解密
- java C# objective-c通用AES对称加解密
- c 实现aes加解密
- JavaScript的CryptoJS AES/ECB/NoPadding加密,可与JAVA objective-c 进行同步加解密
- AES/DES c加解密收藏
- AES加解密算法
- aes加解密
- iOS-AES加解密
- erlang aes 加解密
- c# AES加解密
- AES加解密
- AES加解密算法
- AES加解密
- AES 加解密
- 文件AES加解密
- 关于AES加解密
- AES加解密
- AES加解密算法
- python生成sitemap格式文件
- 视频分辨率QCIF、CIF、2CIF、4CIF,D1~D5
- 深入理解java虚拟机
- 数据结构实验之查找六:顺序查找
- Merge Two Sorted Lists
- Objective-C AES加解密
- [Spring MVC] What is my Spring MVC controller not working?
- 以太网PHY层芯片LAN8720A中文电气特性参数
- celery 修改任务后 需要重启celery
- java 获取用户真实ip地址
- 区块链技术基础:术语&用例
- 位运算
- 对于Javascript闭包的理解
- iOS开发中调试信息的去除