IOS AES加密/解密

iOS-AES加解密各模式(ECB、CBC、CFB、OFB)的实现 AES作为业内最常见的对称加密模式,我们在使用的过程中,不仅仅是要会用,对其不同模式、参数区别,要有一个大概的了解。当与后端进行对接时,能根据后端制定的规则来编写客户端的代码。) 加密轮数越多,当然安全性越好,但也更耗费时间。迭代轮数是系统设置好的,若非自己实现算法可以不用管。 阅读详情

对数据进行操作处理过程中,需要对数据进行加密/解密处理,存在各种各样的加密方式,此处介绍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中使用RNCryptor对文件进行AES加密/解密 RNCryptor是一款开源的跨语言的AES加密/解密器,对Objective-C有着非常好的支持,很适合在iOS下对资源文件进行加密。 1.下载源码 https://github.com/RNCryptor/RNCryptor 目录结构如下 2.添加项目 将RNCrytor目录拷贝到所需要的iOS项目目录中,并将目录内所有文件添加到工程中。在Build Phases的lin 阅读详情

相关推荐

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2662

在IOS小组件对获取的数据进行AES加密解密

这里是flutter项目中的IOS部分,使用的是 swift,导入第三方库。剩下的就是在调用数据库之后调用加密解密方法即可。导入第三方库,为了在小组件中使用需要额外操作。在小组件文件下创建AESUtil.swift。前面的文章介绍了小组件怎么获取数据库的数据。

仁希的博客 636

爬虫风控实战:当你的代理IP被数美滑块盯上时,如何优雅破解?

本文深入探讨了爬虫风控对抗中数美滑块验证码的破解与防御策略。通过分析数美滑块的多层防御机制,提出了代理IP池精细化管理、请求特征拟人化改造以及工程化滑块验证解决方案等系统性方法,帮助开发者有效降低验证码触发率,提升爬虫效率。

weixin_27419879的博客 207

关于IOS 的AES加密

IOS的AES加密解密核心算法

justyouonlylove的博客 962

腾讯云DBA面试(一面)

在第二阶段,根据RM返回的结果,如果涉及分布式事务的所有RM都返回可以提交, 则TM给RM发送commit的命令,每个RM实现自己的提交,同时释放锁和资源,然后RM反馈提交成功, TM完成整个分布式事务;根据事务所处的阶段,可以回滚到具体的版本,实现一致性。1.并发执行的事务,在prepare阶段,redo log先写文件缓存,第一个领头的事务,在等待n个事务后, 在第一个事务去刷写磁盘时,会把同组的其他的事务,也一起刷写到磁盘上,这样就减少了刷盘的次数,降低了磁盘的IOPS。分布式锁是怎么实现的?

u012565458的博客 1977

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2627

iOS 对称加解密之AES

本篇将要说的是iPhone系统自带的对称加解密函数;一引入加密头文件 二实现AES加密 三实现AES解密 四总结 对称加解密: i. DES 数据加密标准 ii. 3DES 同DES,只是采用了3个key进行了多次运算 iii. AES 高级密码标准 DES是早期的数据加密标准,AES是高级加密标准,而3DES是DES向AES转型的中间过渡产物; 下面就说下AES: 首先,

iChenfy的专栏 1314

【SpringBoot香樟转转】debugDay01

在学黑马程序员的苍穹外卖项目,刚开始学,想用maven编译一下代码,结果报错,找不到符号。本着先理解原则,看着能找到这个变量呀。

m0_72696598的博客 1739

IOS 使用AES/ECB/PKCS7Padding 加密、解密数据

IOS 使用AES/ECB/PKCS7Padding 加密、解密数据 AES/ECB/PKCS7Padding + UTF-8、UTF-16、ASCII、Base64、十六进制

罗函 1万+

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

努力,加油每一天鸭~ 1037

群晖、飞牛NAS容器进入终端失败?一步步教你解决Docker Bash错误!(OCI runtime exec failed: exec failed)

群晖、飞牛NAS容器进入终端失败?一步步教你解决Docker Bash错误!(OCI runtime exec failed: exec failed)

XiaoqiangClub的博客 2996

iOS开发 单AES加密/解密

+(NSData *)AES256ParmEncryptWithKey:(NSString *)key Encrypttext:(NSData *)text //加密 { char keyPtr[kCCKeySizeAES256+1]; bzero(keyPtr, sizeof(keyPtr)); [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; NSUIntege

josnmakechen的博客 613

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2069

.NET/android/java/iOS AES通用加密解密

为什么80%的码农都做不了架构师?>>> ...

weixin_33772645的博客 180

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ios java aes加密_AES加密/解密 IOS 端,JAVA端 通用,不限明文字符长度

测试发现,当前问题是:明文字符长度<=15时, IOS 端的 AES 加密结果和 JAVA 端是一样的明文字符长度>15时, IOS 的加密和 JAVA 的加密是不同的, 但都可以在各自语言中成功解密解决办法就不说了,直接上代码-(NSData*)AESOperation:(CCOperation)operationkey:(NSString*)keyiv:(NSString...

weixin_39581652的博客 300

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 加密rsa aes,RSA 和 AES 客户端 加解密插件Andriod/IOS

更新记录1.1.0(2021-06-02)优化了加密的方法调用。1.0(2020-06-04)无查看更多平台兼容性AndroidiOS适用版本区间:4.4 - 11.0适用版本区间:9 - 14原生插件通用使用流程:购买插件,选择该插件绑定的项目。在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。根据插件作者的提供的文档开发代...

weixin_29387991的博客 451

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

**PHP7.0 7.1 7.2 7.3 AES对等加解密类 函数文件_兼容ios/andriod/java等**由于新项目规划要求使用PHP7.2开发环境,但在部分新系统中仍需使用AES加解密方式交互调取早期系统数据,由于早期AES使用的是mcrypt_encrypt函数,但该函数在PHP新版本中已逐渐废弃,PHP新版本中使用openssl_encrypt取代mcrypt_encrypt。于是重...

weixin_39539807的博客 218

【iOS】MD5(加密)/AES/Base64加密和解密

MD5 什么是MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。 MD5的特点 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。

小猿猪哥的博客 1万+

IOS- 加密解密(MD5/AES/DES等)

关于iOS加密解密,系统有提供一套C接口的API,在CommonCrypto中。具体从哪个版本开始有的我不清楚,但是iOS5.0中已经有了。 本文简单的归纳了一下iOS使用的各种加密解密算法(因为比较简单,所以本文不涉及具体的代码实现。未提及RSA加密算法的相关信息)。 对数据加密后进行保存/传输用得较多的是AES和DES,都是对称加密,相对来说AES速度块,安全性高。3DES使用三个密钥,虽然

Try My Best! 1190

python混淆加密ios代码_用AES(MODE_CBC/NoPadding)解密用Python加密的iOS文件

我从Python中的服务器接收到一个以这种方式加密的文件:import osfrom Crypto.Cipher import AESfrom Crypto import Randomdef pad(s):return s + b"\0" * (AES.block_size - len(s) % AES.block_size)def encrypt(message, key):message = ...

weixin_34587698的博客 632

iOS MD5(加密)/AES/Base64加密和解密

MD5 什么是MD5 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。 MD5的特点 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。  2、容易计算:从

--的博客 558

.NET/android/java/iOS AES通用加密解密

移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道。为了让数据交互更安全,我们需要对数据进行加密传输。今天研究了一下,把几种语言的加密都实践了一遍,实现了.NET,java(android),iOS都同一套的加密算法,下面就分享给大家。 AES加密有多种算法模式,下面提供两套模式的可用源码。 加密方式: 先将文本AES加密 ...

weixin_34062469的博客 205

AES加密/解密 IOS 端,JAVA端 通用,不限明文字符长度

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33935777的博客 252
上一篇: IOS Base64编码/解码
下一篇: IOS LOG日志工具
KingToAce
博客等级 码龄10年 9粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值