ios 加密解密(包括base64,DES)非原创
.h文件
- #import <Foundation/Foundation.h>
- /******字符串转base64(包括DES加密)******/
- #define __BASE64( text ) [Base64codeFunc base64StringFromText:text]
- /******base64(通过DES解密)转字符串******/
- #define __TEXT( base64 ) [Base64codeFunc textFromBase64String:base64]
- @interface Base64codeFunc : NSObject
- /************************************************************
- 函数名称 : + (NSString *)base64StringFromText:(NSString *)text
- 函数描述 : 将文本转换为base64格式字符串
- 输入参数 : (NSString *)text 文本
- 输出参数 : N/A
- 返回参数 : (NSString *) base64格式字符串
- 备注信息 :
- **********************************************************/
- + (NSString *)base64StringFromText:(NSString *)text;
- /************************************************************
- 函数名称 : + (NSString *)textFromBase64String:(NSString *)base64
- 函数描述 : 将base64格式字符串转换为文本
- 输入参数 : (NSString *)base64 base64格式字符串
- 输出参数 : N/A
- 返回参数 : (NSString *) 文本
- 备注信息 :
- **********************************************************/
- + (NSString *)textFromBase64String:(NSString *)base64;
- @end
.m文件
- #import "Base64codeFunc.h"
- //引入IOS自带密码库
- #import <CommonCrypto/CommonCryptor.h>
- //空字符串
- #define LocalStr_None @""
- static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- @implementation Base64codeFunc
- + (NSString *)base64StringFromText:(NSString *)text
- {
- if (text && ![text isEqualToString:LocalStr_None]) {
- //取项目的bundleIdentifier作为KEY
- NSString *key = [[NSBundle mainBundle] bundleIdentifier];
- NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];
- //IOS 自带DES加密 Begin
- data = [self DESEncrypt:data WithKey:key];
- //IOS 自带DES加密 End
- return [self base64EncodedStringFrom:data];
- }
- else {
- return LocalStr_None;
- }
- }
- + (NSString *)textFromBase64String:(NSString *)base64
- {
- if (base64 && ![base64 isEqualToString:LocalStr_None]) {
- //取项目的bundleIdentifier作为KEY
- NSString *key = [[NSBundle mainBundle] bundleIdentifier];
- NSData *data = [self dataWithBase64EncodedString:base64];
- //IOS 自带DES解密 Begin
- data = [self DESDecrypt:data WithKey:key];
- //IOS 自带DES加密 End
- return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
- }
- else {
- return LocalStr_None;
- }
- }
- /************************************************************
- 函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key
- 函数描述 : 文本数据进行DES加密
- 输入参数 : (NSData *)data
- (NSString *)key
- 输出参数 : N/A
- 返回参数 : (NSData *)
- 备注信息 : 此函数不可用于过长文本
- **********************************************************/
- + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key
- {
- char keyPtr[kCCKeySizeAES256+];
- bzero(keyPtr, sizeof(keyPtr));
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [data length];
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- void *buffer = malloc(bufferSize);
- size_t numBytesEncrypted = ;
- CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
- kCCOptionPKCS7Padding | kCCOptionECBMode,
- keyPtr, kCCBlockSizeDES,
- NULL,
- [data bytes], dataLength,
- buffer, bufferSize,
- &numBytesEncrypted);
- if (cryptStatus == kCCSuccess) {
- return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
- }
- free(buffer);
- return nil;
- }
- /************************************************************
- 函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key
- 函数描述 : 文本数据进行DES解密
- 输入参数 : (NSData *)data
- (NSString *)key
- 输出参数 : N/A
- 返回参数 : (NSData *)
- 备注信息 : 此函数不可用于过长文本
- **********************************************************/
- + (NSData *)DESDecrypt:(NSData *)data WithKey:(NSString *)key
- {
- char keyPtr[kCCKeySizeAES256+];
- bzero(keyPtr, sizeof(keyPtr));
- [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
- NSUInteger dataLength = [data length];
- size_t bufferSize = dataLength + kCCBlockSizeAES128;
- void *buffer = malloc(bufferSize);
- size_t numBytesDecrypted = ;
- CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
- kCCOptionPKCS7Padding | kCCOptionECBMode,
- keyPtr, kCCBlockSizeDES,
- NULL,
- [data bytes], dataLength,
- buffer, bufferSize,
- &numBytesDecrypted);
- if (cryptStatus == kCCSuccess) {
- return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
- }
- free(buffer);
- return nil;
- }
- /************************************************************
- 函数名称 : + (NSData *)dataWithBase64EncodedString:(NSString *)string
- 函数描述 : base64格式字符串转换为文本数据
- 输入参数 : (NSString *)string
- 输出参数 : N/A
- 返回参数 : (NSData *)
- 备注信息 :
- **********************************************************/
- + (NSData *)dataWithBase64EncodedString:(NSString *)string
- {
- if (string == nil)
- [NSException raise:NSInvalidArgumentException format:nil];
- if ([string length] == )
- return [NSData data];
- static char *decodingTable = NULL;
- if (decodingTable == NULL)
- {
- decodingTable = malloc();
- if (decodingTable == NULL)
- return nil;
- memset(decodingTable, CHAR_MAX, );
- NSUInteger i;
- for (i = ; i < ; i++)
- decodingTable[(short)encodingTable[i]] = i;
- }
- const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];
- if (characters == NULL) // Not an ASCII string!
- return nil;
- char *bytes = malloc((([string length] + ) / ) * );
- if (bytes == NULL)
- return nil;
- NSUInteger length = ;
- NSUInteger i = ;
- while (YES)
- {
- char buffer[];
- short bufferLength;
- for (bufferLength = ; bufferLength < ; i++)
- {
- if (characters[i] == '\0')
- break;
- if (isspace(characters[i]) || characters[i] == '=')
- continue;
- buffer[bufferLength] = decodingTable[(short)characters[i]];
- if (buffer[bufferLength++] == CHAR_MAX) // Illegal character!
- {
- free(bytes);
- return nil;
- }
- }
- if (bufferLength == )
- break;
- if (bufferLength == ) // At least two characters are needed to produce one byte!
- {
- free(bytes);
- return nil;
- }
- // Decode the characters in the buffer to bytes.
- bytes[length++] = (buffer[] << ) | (buffer[] >> );
- if (bufferLength > )
- bytes[length++] = (buffer[] << ) | (buffer[] >> );
- if (bufferLength > )
- bytes[length++] = (buffer[] << ) | buffer[];
- }
- bytes = realloc(bytes, length);
- return [NSData dataWithBytesNoCopy:bytes length:length];
- }
- /************************************************************
- 函数名称 : + (NSString *)base64EncodedStringFrom:(NSData *)data
- 函数描述 : 文本数据转换为base64格式字符串
- 输入参数 : (NSData *)data
- 输出参数 : N/A
- 返回参数 : (NSString *)
- 备注信息 :
- **********************************************************/
- + (NSString *)base64EncodedStringFrom:(NSData *)data
- {
- if ([data length] == )
- return @"";
- char *characters = malloc((([data length] + ) / ) * );
- if (characters == NULL)
- return nil;
- NSUInteger length = ;
- NSUInteger i = ;
- while (i < [data length])
- {
- char buffer[] = {,,};
- short bufferLength = ;
- while (bufferLength < && i < [data length])
- buffer[bufferLength++] = ((char *)[data bytes])[i++];
- // Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.
- characters[length++] = encodingTable[(buffer[] & 0xFC) >> ];
- characters[length++] = encodingTable[((buffer[] & 0x03) << ) | ((buffer[] & 0xF0) >> )];
- if (bufferLength > )
- characters[length++] = encodingTable[((buffer[] & 0x0F) << ) | ((buffer[] & 0xC0) >> )];
- else characters[length++] = '=';
- if (bufferLength > )
- characters[length++] = encodingTable[buffer[] & 0x3F];
- else characters[length++] = '=';
- }
- return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];
- }
- @end
使用方法非常简单
- NSString *string = @"需要加密的字符串";
- //加密后的字符串
- NSString *encodeString = nil;
- //解密后的字符串
- NSString *decodeString = nil;
- - (void)stringToBase64
- {
- encodeString = __BASE64(string);
- }
- - (void)base64ToString
- {
- decodeString = __TEXT(encodeString);
- }
ios 加密解密(包括base64,DES)非原创的更多相关文章
- php中des加密解密 匹配C#des加密解密 对称加密
原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数 可以用于C#和php通信 对数据进行加密,其中$key 是 ...
- ios 加密解密工具类字符判断等
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Helpers : NSObject ...
- 加密 解密 RSA & AES & DES
git: https://github.com/XHTeng/XHCryptorTools rsa RSA加解密中必须考虑到的密钥长度.明文长度和密文长度问题.明文长度需要小于密钥长度,而密文长度则等 ...
- 【java】AES加密解密|及Base64的使用
转载自:http://www.cnblogs.com/arix04/archive/2009/10/15/1511839.html AES加解密算法,使用Base64做转码以及辅助加密: packag ...
- 工作中拓展的加密解密传输方式. DES对称加密传输.
系统间通过xml传输, 不能采用明文, 就加密传输. 秘钥(真正有效的是前8位)存储于配置中. public static string EncryptStr(this string content, ...
- 字符串加密解密(Base64)
var Base64 = { // private property _keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx ...
- C#加密解密(DES,AES,Base64,md5,SHA256,RSA,RC4)
一:异或^简单加解密(数字类型) 1:原理: 异或用于比较两个二进制数的相应位,在执行按位"异或"运算时,如果两个二进制数的相应位都为1或者都为0,则返回0;如果两个二进制数的相应 ...
- C# 加密解密(DES,3DES,MD5,Base64) 类
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> ...
- Go加密解密之DES
一.DES简介 DES(Data Encryption Standard)是对称加密算法,也就是加密和解密用相同的密钥.其入口参数有三个:key.data.mode.key为加密解密使用的密钥,dat ...
随机推荐
- [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...
- 爬虫学习笔记(2)--创建scrapy项目&&css选择器
一.手动创建scrapy项目---------------- 安装scrapy: pip install -i https://pypi.douban.com/simple/ scrapy 1 ...
- 027_编写MapReduce的模板类Mapper、Reducer和Driver
模板类编写好后写MapReduce程序,的模板类编写好以后只需要改参数就行了,代码如下: package org.dragon.hadoop.mr.module; import java.io.IOE ...
- centos磁盘安装与磁盘分区方案
概述 关于centos分区的相关知识 无论怎么分区并不会影响系统文件目录的布局,如果只分/和swap这两个区 没有 usr , var , etc 等分区,在安装好后文件根目录里依然会有usr , v ...
- 方法——<37>
1,返回url参数 /* * 返回参数值 * @method getUrlPara * @papram {string},url中参数名 * @return {string},url中参数值 * */ ...
- 关于在windows命令提示符cmd下运行Java程序的问题
1. win+R出现cmd运行窗口,输入Java源码文件名运行时,错误: 找不到或无法加载主类... 问题背景:我已经配置好了Java环境(安装路径PATH,JAVA_HOME已装好,cmd运行jav ...
- redis中文文档
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...
- linux 上传scp 压缩tar命令
1.Linux 上传scp 1)上传文件与文件夹 scp file weblogic@xx.xxx.xxx.xxx:~/songjd/ scp -r filefolder weblogic@xxx.x ...
- spark总结5 RDD
创建RDD 有两种方式 1 通过hdfs支持的文件系统创建 RDD, RDD里面没有真正要计算的数据,只记录了一下元数据 2 从过scala集合或者数组以并行化的方式创建RDD collect 把结果 ...
- Spark常用算子-value数据类型的算子
package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; im ...