在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件

[cpp] view plaincopy
  1. #import <CommonCrypto/CommonDigest.h>

方法CC_MD5可以获取MD5的16个字符的数组,再通过%02X的形式输出即可获取32位MD5值。

[cpp] view plaincopy
  1. @implementation NSString (CCCryptUtil)
  2. -(NSString*) md5 {
  3. const char * cStrValue = [self UTF8String];
  4. unsigned char theResult[CC_MD5_DIGEST_LENGTH];
  5. CC_MD5(cStrValue, strlen(cStrValue), theResult);
  6. return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
  7. theResult[0], theResult[1], theResult[2], theResult[3],
  8. theResult[4], theResult[5], theResult[6], theResult[7],
  9. theResult[8], theResult[9], theResult[10], theResult[11],
  10. theResult[12], theResult[13], theResult[14], theResult[15]];
  11. }
  12. @end

MD5只能称为一种不可逆的加密算法,只能用作一些检验过程,不能恢复其原文。

apple还提供了RSA、DES、AES等加密算法,见到国外的网站关于AES加密的算法,在此经过加工可以用于字符串加密机密,可用于安全性要求较高的应用。

首先需要导入头文件

[cpp] view plaincopy
  1. #import <CommonCrypto/CommonCryptor.h>

将NSData分类,添加NSData加密解密方法

[cpp] view plaincopy
  1. @implementation NSData (CCCryptUtil)
  2. - (NSData*)AES256EncryptWithKey:(NSString*)key {
  3. char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
  4. bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
  5. [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  6. NSUInteger dataLength = [self length];
  7. size_t bufferSize           = dataLength + kCCBlockSizeAES128;
  8. void* buffer                = malloc(bufferSize);
  9. size_t numBytesEncrypted    = 0;
  10. CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
  11. keyPtr, kCCKeySizeAES256,
  12. NULL /* initialization vector (optional) */,
  13. [self bytes], dataLength, /* input */
  14. buffer, bufferSize, /* output */
  15. &numBytesEncrypted);
  16. if (cryptStatus == kCCSuccess) {
  17. return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
  18. }
  19. free(buffer);
  20. return nil;
  21. }
  22. - (NSData*)AES256DecryptWithKey:(NSString*)key {
  23. char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
  24. bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
  25. // fetch key data
  26. [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  27. NSUInteger dataLength = [self length];
  28. size_t bufferSize           = dataLength + kCCBlockSizeAES128;
  29. void* buffer                = malloc(bufferSize);
  30. size_t numBytesDecrypted    = 0;
  31. CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
  32. keyPtr, kCCKeySizeAES256,
  33. NULL /* initialization vector (optional) */,
  34. [self bytes], dataLength, /* input */
  35. buffer, bufferSize, /* output */
  36. &numBytesDecrypted);
  37. if (cryptStatus == kCCSuccess) {
  38. return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
  39. }
  40. free(buffer); //free the buffer;
  41. return nil;
  42. }
  43. @end

上述代码AES256EncryptWithKey方法为加密函数,AES256DecryptWithKey为解密函数,加密和解密方法使用的参数密钥均为32位长度的字符串,所以可以将任意的字符串经过md5计算32位字符串作为密钥,这样可以允许客户输入任何长度的密钥,并且不同密钥的MD5值也不会重复。

结合上述代码,加工NSString类,提供字符串的AES加密解密方法。代码如下:

[cpp] view plaincopy
  1. @implementation NSString (CCCryptUtil)
  2. // md5方法此处省略
  3. + (NSData*)AES256Encrypt:(NSString*)strSource withKey:(NSString*)key {
  4. NSData *dataSource = [strSource dataUsingEncoding:NSUTF8StringEncoding];
  5. return [dataSource AES256EncryptWithKey:[key md5]];
  6. }
  7. + (NSString*)AES256Decrypt:(NSData*)dataSource withKey:(NSString*)key {
  8. NSData *decryptData = [dataSource AES256DecryptWithKey:[key md5]];
  9. return [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding];
  10. }
  11. @end

ios常见加密解密方法相关推荐

  1. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  2. python des解密_python实现DES加密解密方法实例详解

    本文实例讲述了python实现DES加密解密方法.分享给大家供大家参考.具体分析如下: 实现功能:加密中文等字符串 密钥与明文可以不等长 这里只贴代码,加密过程可以自己百度,此处python代码没有优 ...

  3. python如何加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  4. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

  5. C#常用加密解密方法(MD5加密解密)

    在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...

  6. Linux-编写SHELL 加密解密方法

    Linux-编写SHELL 加密解密方法 我们在编写SHELL脚本时,有时候需要填写密码到脚本里,比如mysql备份脚本,这时我们就需要一个脚本加密解密的方法了,我使用GO语音执行Linux命令加密解 ...

  7. php常用的加密解密方法

    1.php 自带的加密函数: 1-1.不可逆的加密函数为:md5().crypt(): md5() 用来计算 MD5 哈稀.语法为:string md5(string str); crypt() 将字 ...

  8. php解密方法,六种php加密解密方法实例讲解

    代码演示如下: 方法一 function encryptDecrypt($key, $string, $decrypt){ if($decrypt){ $decrypted = rtrim(mcryp ...

  9. php 加密解密方法,PHP加密解密方法

    PHP加密解密方法 2018-03-12 38 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密.function e ...

最新文章

  1. python django windows_Python+Django在windows下的开发环境配置图解
  2. bt下载加速 BitTorrent trackers服务器列表
  3. Windows 10——连接鼠标时触摸板失效解决方案
  4. 关于Unity中NGUI的Pivot和锚点
  5. python图像边缘检测报告_python – 检测图像的最外边缘并基于它进行绘图
  6. windows下替代SSH,Xshell软件的mobaxterm
  7. NeurIPS 2019:进入NLP的黄金时代
  8. 公司决策层时刻想着:怎样开展业务,怎样防止公司完蛋
  9. 《Web应用基础》课程结业报告
  10. Linux-war包解压与压缩
  11. LPC2478(6)UART
  12. Gamarue僵尸网络
  13. flutter引入高德地图_Flutter接入高德地图后运行报错
  14. imshow显示图像为纯白
  15. 100个python算法超详细讲解:搬山游戏
  16. linux上namd使用教程,NAMD入门教程(三)[共28页].pdf
  17. 磁性开关的种类和工作原理
  18. 三分钟教会你用U盘装系统,再也不用花钱重装了
  19. 全网最详细地介绍mybatis-plus框架
  20. LINUX——网络管理

热门文章

  1. 高级转录组分析和R数据可视化第11期(课程推迟,可先报名,时间另行告知)
  2. 病毒进入体内的48小时
  3. Kraken:使用精确比对的超快速宏基因组序列分类软件
  4. R语言DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析、使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值关系
  5. R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签
  6. Python判断两个文件夹中互相不同的文件有哪些、判断一个文件夹相对于另外一个文件夹缺少了哪些文件
  7. 什么是假设检验(hypothesis test)?什么是正态性检验(normality test)?
  8. R语言使用ggplot2包使用geom_violin函数绘制小提琴图(水平小提琴图、垂直小提琴图、边缘不截断小提琴图)实战
  9. python使用imbalanced-learn的ClusterCentroids方法进行下采样处理数据不平衡问题
  10. R包库安装及数据加载:一次安装多个R包、一次加载多个R包