iOS AES128加解密

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

最近有个项目用过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基于openssl 的AES128-cbc-pkcs5 加解密 前段时间自己写客户端加密解密,查了不少资料。现在把自己写的过程记录下来,分享出去让没写过 openssl aes 的小伙伴少闹点心 闲话不说进入正题  1.AES加密和DES加密的区别这里就不提了,网上好多解释 2.AES加密的方式有很多 128 256 cbc ecb cfb 等等,这里介绍AES128-cbc-pkcs5 加解密 你可以写一个公共的加密类 也可以给系统类写一个类的扩展 阅读详情

相关推荐

iOS_AES加解密_128位_ECB模式

AES加密分为128、129、256,只是标识符的不同而已。 AES加密默认为CBC模式,添加一个标识即可变为ECB模式。 ECB模式不需要偏移量。 字符串处理一般为base64编码,字符集为UTF-8。 代码示例如下: // // AESTool.h // // Created by 王盛魁 on 2020/4/3. // Copyright © 2020 王盛魁. All right...

翱翔的魁魁 1363

OC AES 128位解密

+ (NSData *)AES128operation:(CCOperation)operation data:(NSData *)data key:(NSString *)key iv:(NSString *)iv { char keyPtr[kCCKeySizeAES128 + 1]; //kCCKeySizeAES128是加密位数 可以替换成256位的 bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; // IV char ivPtr[kCCBlockSizeAES128 + 1]; bzero(ivPtr, sizeof(ivPtr)); [iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding]; size_t bufferSize = [data length] + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); size_t numBytesEncrypted = 0; // 设置加密参数 /** 这里设置的参数ios默认为CBC加密方式,如果需要其他加密方式如ECB,在kCCOptionPKCS7Padding这个参数后边加上kCCOptionECBMode,即kCCOptionPKCS7Padding | kCCOptionECBMode,但是记得修改上边的偏移量,因为只有CBC模式有偏移量之说 */ CCCryptorStatus cryptorStatus = CCCrypt(operation, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, ivPtr, [data bytes], [data length], buffer, bufferSize, &numBytesEncrypted;); if(cryptorStatus == kCCSuccess) { return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } else { NSLog(@"AES operation failed"); } free(buffer); return nil; }

iOS AES加密解密

iOS AES128加密解密代码完美和硬件适配 和蓝牙底层可以互通

OC AES加解密

@interface LanAES : NSObject +(NSData *)AES256ParmEncryptWithKey:(NSString *)key Encrypttext:(NSData *)text; //加密 +(NSData *)AES256ParmDecryptWithKey:(NSString *)key Decrypttext:(NSData *)text; //解密 +(NSString *) aes256_encrypt:(NSString *)key Encryp.

sgallon88的博客 567

OC与JAVA通用的AES加密解密

最近项目中用到AES加密,但在网上找了很多的库都是OC与JAVA加密后不能项目解密,因为我们的服务器是用java写的,所以不能通用对于做iOS的就是个大麻烦,Android就比较悠哉用java写所以没什么事。不过,在把度娘全身搜遍后,还是让我找到了这个库,出处记不清了,之前找了好多好多的库。下面记录下使用方法。 例子:http://pan.baidu.com/s/1dDktRPn OC

u012113447的专栏 866

AES算法与接口解密

AES算法与接口解密

JacinLee的博客 3383

【Python】AES 128加密和解密

AES加密标准又称为高级加密标准Rijndael加密法,是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。AES的基本要求是,采用对称分组密码体制,密钥长度可以为128、192或256位,分组长度128位,算法应易在各种硬件和软件上实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。提示:以下是本篇文章正文内容,下面案例可供参考。

自动人生博客 5047

aes c android ios,PHP,Android,IOS通信之 AES128加解密案例程序

android上调用代码:mcrypt = new MCrypt();/* 加密*/String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("需加密的字符") );/* 解密*/String decrypted = new String( mcrypt.decrypt( encrypted ) );PHP上调用的代码:$mcrypt = new M...

weixin_40004212的博客 245

ios加解密

iOS常用加密方法:iOS开发过程中,可能会遇到一些信息加密问题。这里提供一些可用的iOS加解密方法。1 md5加密:最终会得到一个32位的字符串,不可逆; 2 AES128AES256加解密 AES128/256加解密的性能和选择:http://blog.csdn.net/newizan/article/details/45461347 AES256比AES128加密多耗时

wangzhen3416的博客 825

IOS中json字符串原生数据请求&IOS跨平台AES128字符串加解密&AFNetworking框架的简单封装使用

一.IOS原生数据请求与数据解析 IOS开发中原始的数据请求是以字符串的形式,字符串参数传到服务器,然后接收服务器返回的字符串进行解析。 通常一个完整的数据请求过程中数据处理经如下几个阶段: 1.制作参数,用NSDictionary封装,即一个son对象; 2.json对象转成json字符串; 3.字符串加密成密文(可选); 4.将json字符串(或加密后的密文

Mr_厚厚的博客 5751

java aes128cbc_AES128位,CBC模式加解密

使用原因:因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密AES。PHP 源码$aes = new aes;echo $aes->aes128cbcEncrypt("11122222");echo "\n";echo $aes->aes128cbcEncrypt("中文aes演示");echo "\...

weixin_30735701的博客 1538

iOS加密之AES

心急的童鞋直接看这里Demo 运行之后可以去在线加密网站验证 AES(Advanced Encryption Standard)高级加密标准,又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES AES的五种加密模式 AES有五种加密模式(CBC、ECB、CTR、OCF、CFB) 1.电码本模式(Electron...

weixin_30693683的博客 195

高性能AES256对称加解密,兼容Java、IOS、Android

最近在设计一个给IOS和Android提供接口的项目框架,在接口安全上准备使用常规的加密技术,确保在非法访问接口的情况下拿到的数据一时半会也没用。 查了相关的资料,用的最多的几种加密算法,DES、AES、3DES等,考虑到手机端的兼容,先用了DES。但我遇到一个现象后,让我决定放弃DES,不知道有没有大神也遇到过,就是我用DES加密后,再用AES加密DES解密后的内容。拿到密文后使用AES反过来

爱生活的程序员 5287

iOS开发之Objective-c的AES128加密和解密算法的实现

1 #import <Foundation/Foundation.h> 2 3 #import <CommonCrypto/CommonDigest.h> 4 5 #import <CommonCrypto/CommonCryptor.h> 6 7 #import "NSData+AES.h" 8 9...

dengpushizhi2789的博客 499

AES128位数据加密算法【直接拷贝可用】

废话不多说,直接上! /** * 数据加密 * mazhanzhu */ public class AES128Util { //密钥 public static final String AESKEY = "******************mzz"; //偏移量 public static final String IVVAL = "******************mzz"; //算法名 public static final String

fengyeNom1的博客 2310

php openssl aes ecb,php7 openssl_decrypt AES的ECB与CBC加解密

php7.2版本用openssl_encrypt代替mcrypt_encrypt,导致以往自己写的Aes加密类不能用。这次项目客户端用的是AES-128-ECB加密,我用在线AES工具来测试,发现自己写的加解密方法得到的值不一样。而最终发现是加密的key不是16位长,导致ios客户端与服务器php的加解密不一致。后商讨key为16位长,遂问题解决。下面是AES-128-ECB加密类;cla...

weixin_42511702的博客 518

SwCrypt核心功能解析:RSA、AES、椭圆曲线加密一站式解决方案

SwCrypt是一款专为iOS和macOS平台打造的Swift加密库,基于CommonCrypto框架实现了RSA密钥生成、加解密、签名验证以及AES加解密等核心功能。作为移动开发中不可或缺的安全工具,它提供了简洁易用的API接口,帮助开发者轻松集成专业级加密能力。 ## 🚀 核心功能概览 SwCrypt的设计理念是"轻量而强大",通过单一库文件即可满足移动应用的大部分加密需求。主要功能模块

gitblog_00877的博客 761

iOS AES/CBC/CTR加解密以及AES-CMAC

还不错,好巧不巧,清理过Xcode缓存后死活下载不下来,当然也可以自己编译个Framework,但是偏偏不想用第三方库了,于是研究了一下,自带的CommonCrypto也可以达到项目需求。感觉iOS自带的CryptoKit不好用,有第三方库。

jjf19891208的专栏 1305
上一篇: iOS星级选择,可滑动的,可点击
下一篇: iOS设置整体支持竖屏,部分页面可支持横屏
TechAlleyBoy
博客等级 码龄10年 25粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值