IOS开发之数据加密与解密:AES256+Base64转码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IOS开发之数据加密与解密:AES256+Base64转码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2801字,纯文字阅读大概需要5分钟。
内容图文
AES:高级加密标准(Advanced Encryption Standard)。在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
以上来自百度百科。
本篇采用代码的方式阐述加密方法。
加密步骤:字符串经过AES加密得到NSData类型,然后在对加密后的NSData类型进行Base64转码,得出最终的字符串
解密步骤:对要解密的字符串进行Base64解码,然后进行解密,得出原字符串
首先创建一个基于NSObject的AESUtility类,,写完的.h文件如下:
#import <Foundation/Foundation.h> @interface AESUtility : NSObject + (NSString *)EncryptString:(NSString *)sourceStr; + (NSString *)DecryptString:(NSString *)secretStr; @end
.m文件导入相应的头文件并且实现这两个方
#import "AESUtility.h" #import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h> //加密与解密的秘钥,需要与后台协商共同定义,保持与后台的秘钥相同 static NSString *key = @"12345678"; @implementation AESUtility + (NSString *)EncryptString:(NSString *)sourceStr { char keyPtr[kCCKeySizeAES256 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSData *sourceData = [sourceStr dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [sourceData length]; size_t buffersize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(buffersize); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [sourceData bytes], dataLength, buffer, buffersize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { NSData *encryptData = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; //对加密后的二进制数据进行base64转码 return [encryptData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; } else { free(buffer); return nil; } } + (NSString *)DecryptString:(NSString *)secretStr { //先对加密的字符串进行base64解码 NSData *decodeData = [[NSData alloc] initWithBase64EncodedString:secretStr options:NSDataBase64DecodingIgnoreUnknownCharacters]; char keyPtr[kCCKeySizeAES256 + 1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUInteger dataLength = [decodeData length]; size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding | kCCOptionECBMode, keyPtr, kCCBlockSizeAES128, NULL, [decodeData bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); if (cryptStatus == kCCSuccess) { NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; return result; } else { free(buffer); return nil; } } @end
原文:http://www.cnblogs.com/csdnmc/p/5391965.html
内容总结
以上是互联网集市为您收集整理的IOS开发之数据加密与解密:AES256+Base64转码全部内容,希望文章能够帮你解决IOS开发之数据加密与解密:AES256+Base64转码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。