.h文件

  1. #import <Foundation/Foundation.h>
  2.  
  3. /******字符串转base64(包括DES加密)******/
  4. #define __BASE64( text ) [Base64codeFunc base64StringFromText:text]
  5.  
  6. /******base64(通过DES解密)转字符串******/
  7. #define __TEXT( base64 ) [Base64codeFunc textFromBase64String:base64]
  8.  
  9. @interface Base64codeFunc : NSObject
  10.  
  11. /************************************************************
  12. 函数名称 : + (NSString *)base64StringFromText:(NSString *)text
  13. 函数描述 : 将文本转换为base64格式字符串
  14. 输入参数 : (NSString *)text 文本
  15. 输出参数 : N/A
  16. 返回参数 : (NSString *) base64格式字符串
  17. 备注信息 :
  18. **********************************************************/
  19. + (NSString *)base64StringFromText:(NSString *)text;
  20.  
  21. /************************************************************
  22. 函数名称 : + (NSString *)textFromBase64String:(NSString *)base64
  23. 函数描述 : 将base64格式字符串转换为文本
  24. 输入参数 : (NSString *)base64 base64格式字符串
  25. 输出参数 : N/A
  26. 返回参数 : (NSString *) 文本
  27. 备注信息 :
  28. **********************************************************/
  29. + (NSString *)textFromBase64String:(NSString *)base64;
  30.  
  31. @end

.m文件

  1. #import "Base64codeFunc.h"
  2.  
  3. //引入IOS自带密码库
  4. #import <CommonCrypto/CommonCryptor.h>
  5.  
  6. //空字符串
  7. #define LocalStr_None @""
  8.  
  9. static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  10.  
  11. @implementation Base64codeFunc
  12.  
  13. + (NSString *)base64StringFromText:(NSString *)text
  14. {
  15. if (text && ![text isEqualToString:LocalStr_None]) {
  16. //取项目的bundleIdentifier作为KEY
  17. NSString *key = [[NSBundle mainBundle] bundleIdentifier];
  18. NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
  19. //IOS 自带DES加密 Begin
  20. data = [self DESEncrypt:data WithKey:key];
  21. //IOS 自带DES加密 End
  22. return [self base64EncodedStringFrom:data];
  23. }
  24. else {
  25. return LocalStr_None;
  26. }
  27. }
  28.  
  29. + (NSString *)textFromBase64String:(NSString *)base64
  30. {
  31. if (base64 && ![base64 isEqualToString:LocalStr_None]) {
  32. //取项目的bundleIdentifier作为KEY
  33. NSString *key = [[NSBundle mainBundle] bundleIdentifier];
  34. NSData *data = [self dataWithBase64EncodedString:base64];
  35. //IOS 自带DES解密 Begin
  36. data = [self DESDecrypt:data WithKey:key];
  37. //IOS 自带DES加密 End
  38. return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  39. }
  40. else {
  41. return LocalStr_None;
  42. }
  43. }
  44.  
  45. /************************************************************
  46. 函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key
  47. 函数描述 : 文本数据进行DES加密
  48. 输入参数 : (NSData *)data
  49. (NSString *)key
  50. 输出参数 : N/A
  51. 返回参数 : (NSData *)
  52. 备注信息 : 此函数不可用于过长文本
  53. **********************************************************/
  54. + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key
  55. {
  56. char keyPtr[kCCKeySizeAES256+];
  57. bzero(keyPtr, sizeof(keyPtr));
  58.  
  59. [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  60.  
  61. NSUInteger dataLength = [data length];
  62.  
  63. size_t bufferSize = dataLength + kCCBlockSizeAES128;
  64. void *buffer = malloc(bufferSize);
  65.  
  66. size_t numBytesEncrypted = ;
  67. CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
  68. kCCOptionPKCS7Padding | kCCOptionECBMode,
  69. keyPtr, kCCBlockSizeDES,
  70. NULL,
  71. [data bytes], dataLength,
  72. buffer, bufferSize,
  73. &numBytesEncrypted);
  74. if (cryptStatus == kCCSuccess) {
  75. return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
  76. }
  77.  
  78. free(buffer);
  79. return nil;
  80. }
  81.  
  82. /************************************************************
  83. 函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key
  84. 函数描述 : 文本数据进行DES解密
  85. 输入参数 : (NSData *)data
  86. (NSString *)key
  87. 输出参数 : N/A
  88. 返回参数 : (NSData *)
  89. 备注信息 : 此函数不可用于过长文本
  90. **********************************************************/
  91. + (NSData *)DESDecrypt:(NSData *)data WithKey:(NSString *)key
  92. {
  93. char keyPtr[kCCKeySizeAES256+];
  94. bzero(keyPtr, sizeof(keyPtr));
  95.  
  96. [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
  97.  
  98. NSUInteger dataLength = [data length];
  99.  
  100. size_t bufferSize = dataLength + kCCBlockSizeAES128;
  101. void *buffer = malloc(bufferSize);
  102.  
  103. size_t numBytesDecrypted = ;
  104. CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
  105. kCCOptionPKCS7Padding | kCCOptionECBMode,
  106. keyPtr, kCCBlockSizeDES,
  107. NULL,
  108. [data bytes], dataLength,
  109. buffer, bufferSize,
  110. &numBytesDecrypted);
  111.  
  112. if (cryptStatus == kCCSuccess) {
  113. return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
  114. }
  115.  
  116. free(buffer);
  117. return nil;
  118. }
  119.  
  120. /************************************************************
  121. 函数名称 : + (NSData *)dataWithBase64EncodedString:(NSString *)string
  122. 函数描述 : base64格式字符串转换为文本数据
  123. 输入参数 : (NSString *)string
  124. 输出参数 : N/A
  125. 返回参数 : (NSData *)
  126. 备注信息 :
  127. **********************************************************/
  128. + (NSData *)dataWithBase64EncodedString:(NSString *)string
  129. {
  130. if (string == nil)
  131. [NSException raise:NSInvalidArgumentException format:nil];
  132. if ([string length] == )
  133. return [NSData data];
  134.  
  135. static char *decodingTable = NULL;
  136. if (decodingTable == NULL)
  137. {
  138. decodingTable = malloc();
  139. if (decodingTable == NULL)
  140. return nil;
  141. memset(decodingTable, CHAR_MAX, );
  142. NSUInteger i;
  143. for (i = ; i < ; i++)
  144. decodingTable[(short)encodingTable[i]] = i;
  145. }
  146.  
  147. const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
  148. if (characters == NULL) // Not an ASCII string!
  149. return nil;
  150. char *bytes = malloc((([string length] + ) / ) * );
  151. if (bytes == NULL)
  152. return nil;
  153. NSUInteger length = ;
  154.  
  155. NSUInteger i = ;
  156. while (YES)
  157. {
  158. char buffer[];
  159. short bufferLength;
  160. for (bufferLength = ; bufferLength < ; i++)
  161. {
  162. if (characters[i] == '\0')
  163. break;
  164. if (isspace(characters[i]) || characters[i] == '=')
  165. continue;
  166. buffer[bufferLength] = decodingTable[(short)characters[i]];
  167. if (buffer[bufferLength++] == CHAR_MAX) // Illegal character!
  168. {
  169. free(bytes);
  170. return nil;
  171. }
  172. }
  173.  
  174. if (bufferLength == )
  175. break;
  176. if (bufferLength == ) // At least two characters are needed to produce one byte!
  177. {
  178. free(bytes);
  179. return nil;
  180. }
  181.  
  182. // Decode the characters in the buffer to bytes.
  183. bytes[length++] = (buffer[] << ) | (buffer[] >> );
  184. if (bufferLength > )
  185. bytes[length++] = (buffer[] << ) | (buffer[] >> );
  186. if (bufferLength > )
  187. bytes[length++] = (buffer[] << ) | buffer[];
  188. }
  189.  
  190. bytes = realloc(bytes, length);
  191. return [NSData dataWithBytesNoCopy:bytes length:length];
  192. }
  193.  
  194. /************************************************************
  195. 函数名称 : + (NSString *)base64EncodedStringFrom:(NSData *)data
  196. 函数描述 : 文本数据转换为base64格式字符串
  197. 输入参数 : (NSData *)data
  198. 输出参数 : N/A
  199. 返回参数 : (NSString *)
  200. 备注信息 :
  201. **********************************************************/
  202. + (NSString *)base64EncodedStringFrom:(NSData *)data
  203. {
  204. if ([data length] == )
  205. return @"";
  206.  
  207. char *characters = malloc((([data length] + ) / ) * );
  208. if (characters == NULL)
  209. return nil;
  210. NSUInteger length = ;
  211.  
  212. NSUInteger i = ;
  213. while (i < [data length])
  214. {
  215. char buffer[] = {,,};
  216. short bufferLength = ;
  217. while (bufferLength < && i < [data length])
  218. buffer[bufferLength++] = ((char *)[data bytes])[i++];
  219.  
  220. // Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.
  221. characters[length++] = encodingTable[(buffer[] & 0xFC) >> ];
  222. characters[length++] = encodingTable[((buffer[] & 0x03) << ) | ((buffer[] & 0xF0) >> )];
  223. if (bufferLength > )
  224. characters[length++] = encodingTable[((buffer[] & 0x0F) << ) | ((buffer[] & 0xC0) >> )];
  225. else characters[length++] = '=';
  226. if (bufferLength > )
  227. characters[length++] = encodingTable[buffer[] & 0x3F];
  228. else characters[length++] = '=';
  229. }
  230.  
  231. return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];
  232. }
  233.  
  234. @end

使用方法非常简单

  1. NSString *string = @"需要加密的字符串";
  2. //加密后的字符串
  3. NSString *encodeString = nil;
  4. //解密后的字符串
  5. NSString *decodeString = nil;
  6.  
  7. - (void)stringToBase64
  8. {
  9. encodeString = __BASE64(string);
  10. }
  11.  
  12. - (void)base64ToString
  13. {
  14. decodeString = __TEXT(encodeString);
  15. }

ios 加密解密(包括base64,DES)非原创的更多相关文章

  1. php中des加密解密 匹配C#des加密解密 对称加密

    原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数  可以用于C#和php通信 对数据进行加密,其中$key 是 ...

  2. ios 加密解密工具类字符判断等

    #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Helpers : NSObject ...

  3. 加密 解密 RSA & AES & DES

    git: https://github.com/XHTeng/XHCryptorTools rsa RSA加解密中必须考虑到的密钥长度.明文长度和密文长度问题.明文长度需要小于密钥长度,而密文长度则等 ...

  4. 【java】AES加密解密|及Base64的使用

    转载自:http://www.cnblogs.com/arix04/archive/2009/10/15/1511839.html AES加解密算法,使用Base64做转码以及辅助加密: packag ...

  5. 工作中拓展的加密解密传输方式. DES对称加密传输.

    系统间通过xml传输, 不能采用明文, 就加密传输. 秘钥(真正有效的是前8位)存储于配置中. public static string EncryptStr(this string content, ...

  6. 字符串加密解密(Base64)

    var Base64 = { // private property _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx ...

  7. C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)

    一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...

  8. C# 加密解密(DES,3DES,MD5,Base64) 类

    public sealed class EncryptUtils     {         #region Base64加密解密         /// <summary>        ...

  9. Go加密解密之DES

    一.DES简介 DES(Data Encryption Standard)是对称加密算法,也就是加密和解密用相同的密钥.其入口参数有三个:key.data.mode.key为加密解密使用的密钥,dat ...

随机推荐

  1. [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例

    原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...

  2. 爬虫学习笔记(2)--创建scrapy项目&&css选择器

    一.手动创建scrapy项目---------------- 安装scrapy: pip install -i https://pypi.douban.com/simple/  scrapy    1 ...

  3. 027_编写MapReduce的模板类Mapper、Reducer和Driver

    模板类编写好后写MapReduce程序,的模板类编写好以后只需要改参数就行了,代码如下: package org.dragon.hadoop.mr.module; import java.io.IOE ...

  4. centos磁盘安装与磁盘分区方案

    概述 关于centos分区的相关知识 无论怎么分区并不会影响系统文件目录的布局,如果只分/和swap这两个区 没有 usr , var , etc 等分区,在安装好后文件根目录里依然会有usr , v ...

  5. 方法——<37>

    1,返回url参数 /* * 返回参数值 * @method getUrlPara * @papram {string},url中参数名 * @return {string},url中参数值 * */ ...

  6. 关于在windows命令提示符cmd下运行Java程序的问题

    1. win+R出现cmd运行窗口,输入Java源码文件名运行时,错误: 找不到或无法加载主类... 问题背景:我已经配置好了Java环境(安装路径PATH,JAVA_HOME已装好,cmd运行jav ...

  7. redis中文文档

    phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...

  8. linux 上传scp 压缩tar命令

    1.Linux 上传scp 1)上传文件与文件夹 scp file weblogic@xx.xxx.xxx.xxx:~/songjd/ scp -r filefolder weblogic@xxx.x ...

  9. spark总结5 RDD

    创建RDD 有两种方式 1 通过hdfs支持的文件系统创建 RDD, RDD里面没有真正要计算的数据,只记录了一下元数据 2 从过scala集合或者数组以并行化的方式创建RDD collect 把结果 ...

  10. Spark常用算子-value数据类型的算子

    package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; im ...