对数据进行操作处理过程中,需要对数据进行加密/解密处理,存在各种各样的加密方式,此处介绍AES对称加密/解密。

AES加密/解密过程结合了Base64编码/解密,利用唯一秘钥key(AES具体描述此处不作详细介绍),导入如下库文件:

#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>

AES加密/解密过程,必须保证其秘钥key一致,否则会导致解密过程失败。

AESUtil.h

#import <UIKit/UIKit.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>/*** AES工具类*/
@interface AESUtil : NSObject/*** AES加密*/
+ (NSString *)aesEncrypt:(NSString *)sourceStr;/*** AES解密*/
+ (NSString *)aesDecrypt:(NSString *)secretStr;@end

AESUtil.m

#import <Foundation/Foundation.h>
#import "AESUtil.h"@interface AESUtil()@end// 秘钥key
const NSString *AESKey = @"abcdefghABCDEFGH";@implementation AESUtil+ (NSString *)aesEncrypt:(NSString *)sourceStr{if (!sourceStr) {return nil;}char keyPtr[kCCKeySizeAES256 + 1];bzero(keyPtr, sizeof(keyPtr));[AESKey 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 *)aesDecrypt:(NSString *)secretStr{if (!secretStr) {return nil;}//先对加密的字符串进行base64解码NSData *decodeData = [[NSData alloc] initWithBase64EncodedString:secretStr options:NSDataBase64DecodingIgnoreUnknownCharacters];char keyPtr[kCCKeySizeAES256 + 1];bzero(keyPtr, sizeof(keyPtr));[AESKey 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

注:秘钥key size不超过16字节。

IOS AES加密/解密相关推荐

  1. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  2. ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密

    **PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等** 由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式 ...

  3. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...

  4. AES加密解密(java、web、app)

    AES加密解密(java.web.app) AES加密解密(java.web.app) java端 Web端 ios端 AES加密解密(java.web.app) java端 package com. ...

  5. java php aes加密解密_php aes 加密解密可与java对接

    php aes 加密解密可与java对接 博主:liu1693 发表时间:2017-02-23 16:52:27 浏览量:100 class Encrypt{ //加密方法 public static ...

  6. python 加密解密_python实现AES加密解密

    本文实例为大家分享了python实现AES加密解密的具体代码,供大家参考,具体内容如下 (1)对于AES加密解密相关知识 (2)实现的功能就是输入0-16个字符,然后经过AES的加密解密最后可以得到原 ...

  7. AES加密解密算法Java实现

    AES加密算法是密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DE ...

  8. openssl与cryptoAPI交互AES加密解密

    原文: http://blog.csdn.net/zhouyuqwert/article/details/7422467 有读者指出代码贴两遍,修改下. 继上次只有CryptoAPI的加密后,这次要实 ...

  9. c php aes加密解密,php的AES加密解密

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. $privateKey = "1234567812345678"; $ ...

  10. 理解AES加密解密的使用方法

    很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...

最新文章

  1. 《自然》评价“天问一号”成功发射—— 全球深空探索走进新时代
  2. linux环境下的小练习
  3. 有关架构图你需要了解的基础知识
  4. Java中如何执行source命令,在Java中运行UNIX Source命令
  5. 狼人杀服务器维护时间,狼人杀官 方将于11月30日进行停机维护
  6. POJ - 2594 Treasure Exploration(最小路径覆盖-二分图最大匹配+传递闭包)
  7. Taro+react开发(32)注意符号
  8. LeetCode 538. 把二叉搜索树转换为累加树
  9. K8S_Google工作笔记0002---K8S介绍和特性
  10. 电子工业出版社计算机图书出版分社致作者函
  11. 考研数学一【高数】 第18讲多元函数积分学
  12. 计算机中缺少qt5quick.dll,qt5quick.dll
  13. 台式计算机没有外放声音,台式电脑外放无声音怎么办
  14. 用MSYS2编译diction程序
  15. postgresql垃圾清理插件pg_repack
  16. 360全景偏移调整_360全景倒车系统安装及调试细节说明
  17. 基于C4D的3d设计
  18. 【论文笔记】Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection*
  19. pycharm启动图片修改
  20. Docker Swarm 健康检查

热门文章

  1. 订单业务中如何保证接口的幂等性
  2. 第61篇:合并多个工作薄的所有工作表
  3. 华为设备配置VRRP,实现设备网关冗余备份
  4. 台达DVP-ES3 ModbusTCP通信案例
  5. 【攻略】2014年跨境进口型电商十大模式盘点
  6. 快手磁力金牛和小店通的区别
  7. 计算机xp怎么做备份,如何备份xp系统电脑所有系统文件
  8. jar包打开闪退解决办法
  9. touch: cannot touch ‘***’: Read-only file system
  10. HTTP协议的详细介绍