最近有个项目用过AES128 的加解密,搜了不少资料,最后封装了一个公共方法,分享一下。代码如下

一:.h文件

#import <Foundation/Foundation.h>@interface FSAES128 : NSObject/***  加密**  @param string 需要加密的string**  @return 加密后的字符串*/
+ (NSString *)AES128EncryptStrig:(NSString *)string;/***  解密**  @param string 加密的字符串**  @return 解密后的内容*/
+ (NSString *)AES128DecryptString:(NSString *)string;
@end

二:.m文件

#import "FSAES128.h"
#import "NSData+AES128.h"#define IV  @"偏移量 16位长度的字符串"
#define  KEY  @"key值 16位长度的字符串"@implementation FSAES128/***  加密**  @param string 需要加密的string**  @return 加密后的字符串*/
+ (NSString *)AES128EncryptStrig:(NSString *)string{NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];NSData *aesData = [data AES128EncryptWithKey:KEY iv:IV];return [FSAES128 convertDataToHexStr:aesData];
}/***  解密**  @param string 加密的字符串**  @return 解密后的内容*/
+ (NSString *)AES128DecryptString:(NSString *)string{NSData *data  = [FSAES128 convertHexStrToData:string];NSData *aesData = [data AES128DecryptWithKey:KEY iv:IV];return [[NSString alloc] initWithData:aesData encoding:NSUTF8StringEncoding];
}//16进制转换为NSData
+ (NSData*)convertHexStrToData:(NSString*)str {if (!str || [str length] ==0) {return nil;}NSMutableData *hexData = [[NSMutableData alloc]initWithCapacity:[str length]*2];NSRange range;if ([str length] %2==0) {range = NSMakeRange(0,2);} else {range = NSMakeRange(0,1);}for (NSInteger i = range.location; i < [str length]; i +=2) {unsigned int anInt;NSString *hexCharStr = [str substringWithRange:range];NSScanner *scanner = [[NSScanner alloc]initWithString:hexCharStr];[scanner scanHexInt:&anInt];NSData *entity = [[NSData alloc]initWithBytes:&anInt length:1];[hexData appendData:entity];range.location+= range.length;range.length=2;}
//    NSLog(@"hexdata: %@", hexData);return hexData;
}//NSData转换为16进制
+ (NSString*)convertDataToHexStr:(NSData*)data {if (!data || [data length] ==0) {return @"";}NSMutableString *string = [[NSMutableString alloc]initWithCapacity:[data length]/2];[data enumerateByteRangesUsingBlock:^(const void*bytes,NSRange byteRange,BOOL*stop) {unsigned char *dataBytes = (unsigned  char*)bytes;for (NSInteger i =0; i < byteRange.length; i++) {NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];if ([hexStr length] ==2) {[string appendString:hexStr];} else {[string appendFormat:@"0%@", hexStr];}}}];return string;
}@end

三:NSData+AES128文件

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCryptor.h>
@interface NSData (AES128)
/***  加密**  @param key 公钥*  @param iv  偏移量**  @return 加密之后的NSData*/
- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv;
/***  解密**  @param key 公钥*  @param iv  偏移量**  @return 解密之后的NSData*/
- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv;@end
#import "NSData+AES128.h"@implementation NSData (AES128)
/***  根据CCOperation,确定加密还是解密**  @param operation kCCEncrypt -> 加密  kCCDecrypt->解密*  @param key       公钥*  @param iv        偏移量**  @return 加密或者解密的NSData*/
- (NSData *)AES128Operation:(CCOperation)operation key:(NSString *)key iv:(NSString *)iv{char keyPtr[kCCKeySizeAES128 + 1];memset(keyPtr, 0, sizeof(keyPtr));[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];char ivPtr[kCCBlockSizeAES128 + 1];memset(ivPtr, 0, sizeof(ivPtr));[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];NSUInteger dataLength = [self length];size_t bufferSize = dataLength + kCCBlockSizeAES128;void *buffer = malloc(bufferSize);size_t numBytesCrypted = 0;CCCryptorStatus cryptStatus = CCCrypt(operation,kCCAlgorithmAES128,kCCOptionPKCS7Padding,keyPtr,kCCBlockSizeAES128,ivPtr,[self bytes],dataLength,buffer,bufferSize,&numBytesCrypted);if (cryptStatus == kCCSuccess) {return [NSData dataWithBytesNoCopy:buffer length:numBytesCrypted];}free(buffer);return nil;}- (NSData *)AES128EncryptWithKey:(NSString *)key iv:(NSString *)iv{return [self AES128Operation:kCCEncrypt key:key iv:iv];}- (NSData *)AES128DecryptWithKey:(NSString *)key iv:(NSString *)iv{return [self AES128Operation:kCCDecrypt key:key iv:iv];}@end

四:使用方法

//加密的字段
NSString *str = @"75677F53D5688E1FE9AC073E324B76BC6CCD8CCC05509FBF74375B40BDE50DA0B6A153355D82567B1E2FAAC96600C61064E9820AEA58E72C1DA3D3108F6DABE81E1766200F7183B0AB1F093B368F03321CB0D14EDDD57E3E64C2549FEC04C25187F8008AB90E4B7D0B69256A0467A923C56F004F721207C3A69E30D3470C08601523D79BE3F4907FC69A7CB02C747782ABC4A7F6D52CACB72DAE92984FFD73CA";//解密字符串
NSString *contentStr = [FSAES128 AES128DecryptString:str];
contentStr 解密值:
{"freezeMoney": 0,"ordersMoney": null,"roleCode": 2,"status": 0,"totalMoney": 500,"userCode": "116092100000006","userName": "13691116842","walletId": "1"
}

iOS AES128加解密相关推荐

  1. SM2加密解决java与iOS端加解密不配套问题

    SM2加密解决java与iOS端加解密不配套问题 问题描述 问题判定 代码 声明 问题描述 使用java开发的SM2加解密,由java层生成SM2公私钥,iOS.Android(因和java层一致,暂 ...

  2. AES128加解密流程详细介绍

    AES128加解密流程详细介绍 公司想要对嵌入式设备里的文本进行加密,只能用AES128试试,经过一上午的了解,整理了下流程. 参考文章: AES加密 https://zhuanlan.zhihu.c ...

  3. 【小程序】蓝牙锁——AES128加解密 十六进制加解密

    总结一下在开发小程序时遇到的蓝牙锁调试问题,根据厂家提供的蓝牙开发文档要求进行AES128加解密进行通信,刚开始挺懵的,根本就不了解这个加解密方法,在查阅很多资料以及踩了很多坑之后总算是解决了. 可以 ...

  4. 关于AES128加解密的使用

    DES:加密标准 秘钥长度56比特,安全强度为2的56次方 AES:高级加密标准,主要包括 AES-128,AES-196,AES-256,属于对称密码 密钥K: 用来加密明文的密码,在对称加密算法中 ...

  5. AES-128加解密工具类

    Java实现AES加密.解密 import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import java ...

  6. AES详细加解密步骤以及AES-128的C++实现

    文章目录 用到的矩阵 S盒 S盒的逆 轮常量矩阵 列混合矩阵 列混合矩阵的逆 加密步骤 对密钥的处理(密钥扩展) 对明文的处理 字节替换 行移位 GF(2^8^)上的乘法 列混合 轮密钥加 解密步骤 ...

  7. HLS 流媒体服务与加解密

    编译安装 Nginx 这个时候选择编译安装的方式:nginx 的 rtmp 模块,下载地址是 github.com/arut/nginx--nginx_mod_h264_streaming 的下载地址 ...

  8. AES加解密效率测试(纯软件AES128/256)--以嵌入式Cortex-M0与M3 平台为例

    目录 AES256/128 纯软件加解密时间效率测试--以Cortex-M0与M3 MCU为例 一.测试环境与方法: 二.测试代码介绍(以AES256为例) 三.测试结果与抓包截图 1.主频统一设置为 ...

  9. ios下使用rsa算法与php进行加解密通讯

    首先了解一下几个相关概念,以方便后面遇到的问题的解决: RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的,RSA就是取自他们三个人的名字.算法基于一个数 ...

最新文章

  1. 独家 | 如何让情绪智力驱动创新?
  2. 进腾讯了!(实习面经分享)
  3. nginx php iconv,Nginx +PHP部署一
  4. python:校验邮箱格式
  5. (转)postgresql+postgis空间数据库使用总结
  6. Asset Store 下载的package存在什么地方?
  7. Linux 定时任务详解
  8. cocos studio和cocosbuilder什么区别
  9. vue项目运用繁体字
  10. http://baiy.cn/doc/cpp/inside_exception.htm#栈回退(Stack_Unwind)机制
  11. excel 永久保存宏命令
  12. HEX编码、Base64编码
  13. Python学习,接上篇文章的50道基础入门练习题(附答案)
  14. linux中rcf命名管道,RCF的简单使用教程以及什么是回调函数
  15. Java基础-Lambda表达式基础练习
  16. Thymeleaf th:each遍历,th:if、th:switch 条件判断,input,select,radio 回显赋值
  17. 使用 Hexo 快速免费搭建个人网站
  18. 如何在IDEA配置Tomcat
  19. 【JAVA】逻辑控制
  20. 海盗王GM工具箱 - 物品编辑器

热门文章

  1. 2021(第五届)高工智能汽车金球奖名单揭晓
  2. 摆脱枯燥的文字描述——markdown表情包黑科技
  3. 2020年浙江高考考python吗_2020年浙江高考使用全国几卷
  4. 数据解读 | 想要与北上争雄,深圳还有哪些课要补?
  5. 其他常见的getshell方式
  6. 计算机在给水中的应用有哪些,浅谈计算机在给排水方面的应用
  7. 浏览器的这些功能和使用技巧你肯定想不到
  8. JAVA毕业设计Vue.js音乐播放器设计与实现计算机源码+lw文档+系统+调试部署+数据库
  9. 学习python应用的暑假(1、爬取图片)
  10. 转载 | 身份管理入门