iOS之加密的三种方法

  1 //需要导入   #import <CommonCrypto/CommonCryptor.h> 
  2 
  3 ==============MD5加密============ 
  4 
  5 NSString *str = @"加密的内容"; 
  6 
  7         //转换成C语言的字符串 
  8 
  9         const char *cStr=[str UTF8String]; 
 10 
 11         //MD5加密的结果是128位,需要开辟一个16字节的空间 
 12 
 13         unsigned char result[16]; 
 14 
 15         //调用加密函数 
 16 
 17         CC_MD5(cStr, (unsigned int)strlen(cStr), result); 
 18 
 19         //通过上面这个方法获取的MD5是一个16个字符的数组,需要转换成32位的MD5值 
 20 
 21         NSMutableString *string = [NSMutableString stringWithCapacity:10]; 
 22 
 23         for (int i=; i<16; i++) { 
 24 
 25             [string appendString:[NSString stringWithFormat:@"%02x",result[i]]]; 
 26 
 27         } 
 28 
 29         NSLog(@"MD5加密:%@",string); 
 30 
 31  
 32 
 33 ===============base64加密解密============= 
 34 
 35 //ios7 以后提供了base64的转码方式 
 36 
 37         //加密 
 38 
 39         NSString *pass=@"加密的内容"; 
 40 
 41         NSData *passData=[pass dataUsingEncoding:NSUTF8StringEncoding]; 
 42 
 43         NSString *result = [passData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 
 44 
 45         NSLog(@"base64加密:%@",result); 
 46 
 47          
 48 
 49         //解密 
 50 
 51         NSData *decodeData = [[NSData alloc]initWithBase64EncodedString:result options:]; 
 52 
 53         NSString *decodeStr = [[NSString alloc]initWithData:decodeData encoding:NSUTF8StringEncoding]; 
 54 
 55         NSLog(@"base64解密:%@",decodeStr); 
 56 
 57  
 58 
 59 ================AES加密解密=============== 
 60 
 61 //新建一个NSData类,写入一下两个方法 
 62 
 63 //加密方法 
 64 
 65 - (NSData*)AES256EncryptWithKey:(NSString*)key { 
 66 
 67      
 68 
 69     char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused) 
 70 
 71     bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) 
 72 
 73      
 74 
 75     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 
 76 
 77      
 78 
 79     NSUInteger dataLength = [self length]; 
 80 
 81      
 82 
 83     size_t bufferSize           = dataLength + kCCBlockSizeAES128; 
 84 
 85     void* buffer                = malloc(bufferSize); 
 86 
 87      
 88 
 89     size_t numBytesEncrypted    = ; 
 90 
 91     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
 92 
 93                                           keyPtr, kCCKeySizeAES256, 
 94 
 95                                           NULL /* initialization vector (optional) */, 
 96 
 97                                           [self bytes], dataLength, /* input */ 
 98 
 99                                           buffer, bufferSize, /* output */ 
100 
101                                           &numBytesEncrypted); 
102 
103      
104 
105     if (cryptStatus == kCCSuccess) { 
106 
107         return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 
108 
109     } 
110 
111      
112 
113     free(buffer); 
114 
115     return nil; 
116 
117 } 
118 
119 //解密方法 
120 
121 - (NSData*)AES256DecryptWithKey:(NSString*)key { 
122 
123      
124 
125     char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused) 
126 
127     bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) 
128 
129      
130 
131     // fetch key data 
132 
133     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 
134 
135      
136 
137     NSUInteger dataLength = [self length]; 
138 
139      
140 
141     size_t bufferSize           = dataLength + kCCBlockSizeAES128; 
142 
143     void* buffer                = malloc(bufferSize); 
144 
145      
146 
147     size_t numBytesDecrypted    = ; 
148 
149     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
150 
151                                           keyPtr, kCCKeySizeAES256, 
152 
153                                           NULL /* initialization vector (optional) */, 
154 
155                                           [self bytes], dataLength, /* input */ 
156 
157                                           buffer, bufferSize, /* output */ 
158 
159                                           &numBytesDecrypted); 
160 
161      
162 
163     if (cryptStatus == kCCSuccess) { 
164 
165         return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; 
166 
167     } 
168 
169      
170 
171     free(buffer); //free the buffer; 
172 
173  
174 
175 在另外的类里面调用上面NSData里面的方法 
176 
177 //==========AES加密解密============= 
178 
179         NSString *key = @"mykey";//钥匙 
180 
181         NSString *secret = @"加密内容";//准备加密的内容 
182 
183         NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding]; 
184 
185         NSData *ciper = [plain AES256EncryptWithKey:key]; 
186 
187         NSLog(@"AES加密%@",ciper); 
188 
189         //解密 
190 
191         plain = [ciper AES256DecryptWithKey:key]; 
192 
193          NSLog(@"AES解密:%@",[[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding]);

 

转载于:https://www.cnblogs.com/rglmuselily/p/5262134.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2279. 装满石头的背包的最大数量(贪心)

文章目录1. 题目2. 解题1. 题目 现有编号从 0 到 n - 1 的 n 个背包。 给你两个下标从 0 开始的整数数组 capacity 和 rocks 。 第 i 个背包最大可以装 capacity[i] 块石头&#xff0c;当前已经装了 rocks[i] 块石头。 另给你一个整数 additionalRocks &#xff0c;表示你可以…

python网络爬虫系列(十一)——JS的解析

JS的解析 学习目标&#xff1a; 了解 定位js的方法了解 添加断点观察js的执行过程的方法应用 js2py获取js的方法 1 确定js的位置 对于前面人人网的案例&#xff0c;我们知道了url地址中有部分参数&#xff0c;但是参数是如何生成的呢&#xff1f; 毫无疑问&#xff0c;参数肯…

怎么在前台取的ViewBag中的值

如果是list<>可以直接遍历VieweBag同样可以遍历但只要通过断点调试,不难发现,ViewBag中的值,在前台其实是可以点的.这是一个viewbag.ViewBag.publishOne前台取值直接点就可以啦ViewBag.publishOne.Town 来自为知笔记(Wiz)转载于:https://www.cnblogs.com/funn0812/p/5262…

[Leetcode]@python 107. Binary Tree Level Order Traversal II

题目链接 https://leetcode.com/problems/binary-tree-level-order-traversal-ii/ 题目原文 Given a binary tree, return the bottom-up level order traversal of its nodes values. (ie, from left to right, level by level from leaf to root). For example: Given binary…

LeetCode 2280. 表示一个折线图的最少线段数(几何)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 stockPrices &#xff0c;其中 stockPrices[i] [dayi, pricei] 表示股票在 dayi 的价格为 pricei 。 折线图 是一个二维平面上的若干个点组成的图&#xff0c;横坐标表示日期&#xff0c;纵坐标表示价格&#xff0c;折线…

一、mongodb数据库系列——介绍和安装 简单使用 增删改查

一、Mongodb的介绍和安装 学习目标 了解 非关系型数据库的优势了解 mongodb的安装 1. mongodb的介绍 1.1 什么是mongodb mongodb 是一个功能最丰富的NoSQL非关系数据库。由 C 语言编写。mongodb 本身提供S端存储数据&#xff0c;即server&#xff1b;也提供C端操作处理&…

第一次ActiveX Fuzzing测试

接着上一篇的看雪Exploit me试题。 这道题给出了一个ActiveX的DLL&#xff0c;挖掘这个DLL中的漏洞。 由于从来没有接触过ActiveX的Fuzzing&#xff0c;所以找了一些文章来看。自己动手试验了一下。 根据提示&#xff0c;使用了Comraider来作为Fuzzing工具。这个工具比较老了&a…

二、mongodb数据库系列——聚合操作 索引操作 权限管理

一、mongodb的聚合操作 学习目标 了解 mongodb的聚合原理掌握 mongdb的管道命令掌握 mongdb的表达式 1 mongodb的聚合是什么 聚合(aggregate)是基于数据处理的聚合管道&#xff0c;每个文档通过一个由多个阶段&#xff08;stage&#xff09;组成的管道&#xff0c;可以对每…

LeetCode 2283. 判断一个数的数字计数是否等于数位的值

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#xff0c;都满足数位 i 在 num 中出现了 num[i]次&#xff0c;那么请你返回 true &#xff0c;否则返回 false 。 示例 …

LeetCode 2284. 最多单词数的发件人

文章目录1. 题目2. 解题1. 题目 给你一个聊天记录&#xff0c;共包含 n 条信息。给你两个字符串数组 messages 和 senders &#xff0c;其中 messages[i] 是 senders[i] 发出的一条 信息 。 一条 信息 是若干用单个空格连接的 单词 &#xff0c;信息开头和结尾不会有多余空格…

三、mongodb数据库系列——mongodb和python交互 总结

一、mongodb和python交互 学习目标 掌握 mongdb和python交互的增删改查的方法掌握 权限认证的方式使用pymongo模块 1. mongdb和python交互的模块 pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo 2. 使用pymongo 2.1 导入pymongo并选择要操作的…

Proactor设计模式:单线程高并发

Boost::Asio为同步和异步操作提供了并行支持&#xff0c;异步支持基于前摄器模式&#xff0c;这种模式的优点和缺点可能比只同步或反应器方法要低。让我们检查一下Boost::Asio是如何实现前摄器模式的&#xff0c;没有引用基于平台的细节。前摄器设计模式&#xff0c;改编自POSA…

一、scrapy爬虫框架——概念作用和工作流程 scrapy的入门使用

scrapy的概念和流程 学习目标&#xff1a; 了解 scrapy的概念了解 scrapy框架的作用掌握 scrapy框架的运行流程掌握 scrapy中每个模块的作用 1. scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使…

LeetCode 2285. 道路的最大总重要性

文章目录1. 题目2. 解题1. 题目 给你一个整数 n &#xff0c;表示一个国家里的城市数目。城市编号为 0 到 n - 1 。 给你一个二维整数数组 roads &#xff0c;其中 roads[i] [ai, bi] 表示城市 ai 和 bi 之间有一条 双向 道路。 你需要给每个城市安排一个从 1 到 n 之间的整…

项目管理——文档的重要性

网址&#xff1a;http://www.cnblogs.com/Andon_liu/p/5272744.html 转载于:https://www.cnblogs.com/bluewhy/p/5274674.html

二、scrapy爬虫框架——scrapy构造并发送请求

scrapy数据建模与请求 学习目标&#xff1a; 应用 在scrapy项目中进行建模应用 构造Request对象&#xff0c;并发送请求应用 利用meta参数在不同的解析函数中传递数据 1. 数据建模 通常在做项目的过程中&#xff0c;在items.py中进行数据建模 1.1 为什么建模 定义item即提前…

LeetCode 2287. 重排字符形成目标字符串

文章目录1. 题目2. 解题1. 题目 给你两个下标从 0 开始的字符串 s 和 target 。你可以从 s 取出一些字符并将其重排&#xff0c;得到若干新的字符串。 从 s 中取出字符并重新排列&#xff0c;返回可以形成 target 的 最大 副本数。 示例 1&#xff1a; 输入&#xff1a;s &…

MVC阻止用户注入JavaScript代码或者Html标记

使用HttpUtility.HtmlEncode("")将字符串进行过滤处理 转载于:https://www.cnblogs.com/xuhongfei/p/5275124.html

Python自动化办公——xlrd、xlwt读写Excel

一、xlrd、xlwt读写Excel 1、读操作 import xlrd# 1、打开工作本workbook xlsx xlrd.open_workbook(r.\7月下旬入库表.xlsx)# 2、打开需要操作的表sheet table xlsx.sheet_by_index(0) # table xlsx.sheet_by_name(7月下旬入库表)# 3、读取指定单元格的数据 print(table.c…

LeetCode 2288. 价格减免

文章目录1. 题目2. 解题1. 题目 句子 是由若干个单词组成的字符串&#xff0c;单词之间用单个空格分隔&#xff0c;其中每个单词可以包含数字、小写字母、和美元符号 $ 。 如果单词的形式为美元符号后跟着一个非负实数&#xff0c;那么这个单词就表示一个价格。 例如 "$…