ios常见加密解密方法
在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件
- #import <CommonCrypto/CommonDigest.h>
方法CC_MD5可以获取MD5的16个字符的数组,再通过%02X的形式输出即可获取32位MD5值。
- @implementation NSString (CCCryptUtil)
- -(NSString*) md5 {
- const char * cStrValue = [self UTF8String];
- unsigned char theResult[CC_MD5_DIGEST_LENGTH];
- CC_MD5(cStrValue, strlen(cStrValue), theResult);
- return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
- theResult[0], theResult[1], theResult[2], theResult[3],
- theResult[4], theResult[5], theResult[6], theResult[7],
- theResult[8], theResult[9], theResult[10], theResult[11],
- theResult[12], theResult[13], theResult[14], theResult[15]];
- }
- @end
MD5只能称为一种不可逆的加密算法,只能用作一些检验过程,不能恢复其原文。
apple还提供了RSA、DES、AES等加密算法,见到国外的网站关于AES加密的算法,在此经过加工可以用于字符串加密机密,可用于安全性要求较高的应用。
首先需要导入头文件
- #import <CommonCrypto/CommonCryptor.h>
将NSData分类,添加NSData加密解密方法
- @implementation NSData (CCCryptUtil)
- - (NSData*)AES256EncryptWithKey:(NSString*)key {
- char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
- bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [self length];
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- void* buffer = malloc(bufferSize);
- size_t numBytesEncrypted = 0;
- CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
- keyPtr, kCCKeySizeAES256,
- NULL /* initialization vector (optional) */,
- [self bytes], dataLength, /* input */
- buffer, bufferSize, /* output */
- &numBytesEncrypted);
- if (cryptStatus == kCCSuccess) {
- return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
- }
- free(buffer);
- return nil;
- }
- - (NSData*)AES256DecryptWithKey:(NSString*)key {
- char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
- bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
- // fetch key data
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [self length];
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- void* buffer = malloc(bufferSize);
- size_t numBytesDecrypted = 0;
- CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
- keyPtr, kCCKeySizeAES256,
- NULL /* initialization vector (optional) */,
- [self bytes], dataLength, /* input */
- buffer, bufferSize, /* output */
- &numBytesDecrypted);
- if (cryptStatus == kCCSuccess) {
- return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
- }
- free(buffer); //free the buffer;
- return nil;
- }
- @end
上述代码AES256EncryptWithKey方法为加密函数,AES256DecryptWithKey为解密函数,加密和解密方法使用的参数密钥均为32位长度的字符串,所以可以将任意的字符串经过md5计算32位字符串作为密钥,这样可以允许客户输入任何长度的密钥,并且不同密钥的MD5值也不会重复。
结合上述代码,加工NSString类,提供字符串的AES加密解密方法。代码如下:
- @implementation NSString (CCCryptUtil)
- // md5方法此处省略
- + (NSData*)AES256Encrypt:(NSString*)strSource withKey:(NSString*)key {
- NSData *dataSource = [strSource dataUsingEncoding:NSUTF8StringEncoding];
- return [dataSource AES256EncryptWithKey:[key md5]];
- }
- + (NSString*)AES256Decrypt:(NSData*)dataSource withKey:(NSString*)key {
- NSData *decryptData = [dataSource AES256DecryptWithKey:[key md5]];
- return [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding];
- }
- @end
ios常见加密解密方法相关推荐
- python实现加密字符串_Python实现对字符串的加密解密方法示例
本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...
- python des解密_python实现DES加密解密方法实例详解
本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...
- python如何加密字符串_Python实现对字符串的加密解密方法示例
本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...
- Java实现一个简单的加密解密方法
Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...
- C#常用加密解密方法(MD5加密解密)
在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...
- Linux-编写SHELL 加密解密方法
Linux-编写SHELL 加密解密方法 我们在编写SHELL脚本时,有时候需要填写密码到脚本里,比如mysql备份脚本,这时我们就需要一个脚本加密解密的方法了,我使用GO语音执行Linux命令加密解 ...
- php常用的加密解密方法
1.php 自带的加密函数: 1-1.不可逆的加密函数为:md5().crypt(): md5() 用来计算 MD5 哈稀.语法为:string md5(string str); crypt() 将字 ...
- php解密方法,六种php加密解密方法实例讲解
代码演示如下: 方法一 function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcryp ...
- php 加密解密方法,PHP加密解密方法
PHP加密解密方法 2018-03-12 38 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密.function e ...
最新文章
- python django windows_Python+Django在windows下的开发环境配置图解
- bt下载加速 BitTorrent trackers服务器列表
- Windows 10——连接鼠标时触摸板失效解决方案
- 关于Unity中NGUI的Pivot和锚点
- python图像边缘检测报告_python – 检测图像的最外边缘并基于它进行绘图
- windows下替代SSH,Xshell软件的mobaxterm
- NeurIPS 2019:进入NLP的黄金时代
- 公司决策层时刻想着:怎样开展业务,怎样防止公司完蛋
- 《Web应用基础》课程结业报告
- Linux-war包解压与压缩
- LPC2478(6)UART
- Gamarue僵尸网络
- flutter引入高德地图_Flutter接入高德地图后运行报错
- imshow显示图像为纯白
- 100个python算法超详细讲解:搬山游戏
- linux上namd使用教程,NAMD入门教程(三)[共28页].pdf
- 磁性开关的种类和工作原理
- 三分钟教会你用U盘装系统,再也不用花钱重装了
- 全网最详细地介绍mybatis-plus框架
- LINUX——网络管理
热门文章
- 高级转录组分析和R数据可视化第11期(课程推迟,可先报名,时间另行告知)
- 病毒进入体内的48小时
- Kraken:使用精确比对的超快速宏基因组序列分类软件
- R语言DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析、使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值关系
- R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签
- Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件
- 什么是假设检验(hypothesis test)?什么是正态性检验(normality test)?
- R语言使用ggplot2包使用geom_violin函数绘制小提琴图(水平小提琴图、垂直小提琴图、边缘不截断小提琴图)实战
- python使用imbalanced-learn的ClusterCentroids方法进行下采样处理数据不平衡问题
- R包库安装及数据加载:一次安装多个R包、一次加载多个R包