iOS开发笔记(3)---- 3DES/MD5加解密
来源:互联网 发布:网页编辑软件下载 编辑:程序博客网 时间:2023/12/10 20:58
对称加密需要注意的是:解密是加密的逆过程,逆过程,逆过程!如果解不出来一定要从头到尾一点点检查,一定可以找到原因的。
准备工作:导入系统头文件
#import “CommonCryptor.h”
#import “CommonDigest.h”
加密代码如下
//将秘钥字符串转换为Byte数组 NSData *kd=[keyStr dataUsingEncoding:NSUTF8StringEncoding]; const void *key=kd.bytes; //将明文字符串转换为Byte数组 NSData *dt=[plainText dataUsingEncoding:NSUTF8StringEncoding]; const void *data=dt.bytes; int dataLength = (int)dt.length; int diff = 8 - (dataLength % 8); int newSize = 0; if(diff > 0) newSize = dataLength + diff; char dataPtr[newSize]; memcpy(dataPtr, data, dataLength); for(int i = 0; i < diff; i++){ dataPtr[i + dataLength] = 0x00; } void *buffer; buffer = malloc( newSize * sizeof(uint8_t)); memset(buffer, 0x0, newSize); memcpy(buffer, data, dataLength); void *k; k=malloc(24*sizeof(uint8_t)); memcpy(k, key, 24); size_t movedBytes = 0; //执行加密 CCCrypt(kCCEncrypt,kCCAlgorithm3DES, kCCOptionECBMode|kCCOptionPKCSNoPadding, k, kCCKeySize3DES, nil, dataPtr, newSize, buffer, newSize, &movedBytes); NSData *myData = [NSData dataWithBytes:(const void *)buffer length:(NSUInteger)movedBytes]; //加密完成的Byte数组不能直接转换成字符串,需要进行Base64或转成16进制 NSString *ret=[IPNGTMBase64 encodeBase64Data:myData]; return ret;
解密为加密的逆过程,代码如下:
//将秘钥字符串转换为Byte数组 NSData *kd=[keyStr dataUsingEncoding:NSUTF8StringEncoding]; const void *key=kd.bytes; //将密文字符串转换为Byte数组(Base64解码或16进制转二进制) NSData *dt=[IPNGTMBase64 decodeString:plainText]; const void *data=dt.bytes; long dataLength = dt.length; void *buffer; buffer = malloc( dataLength * sizeof(uint8_t)); memcpy(buffer, data, dataLength); //复制 void *k; k=malloc(24*sizeof(uint8_t)); memcpy(k, key, 24); size_t movedBytes = 0; //执行解码 CCCrypt(kCCDecrypt, kCCAlgorithm3DES,kCCOptionECBMode|kCCOptionPKCSNoPadding, k, kCCKeySize3DES, nil, data, dataLength, buffer, dataLength, &movedBytes); NSData *myData = [NSData dataWithBytes:(const void *)buffer length:(NSUInteger)movedBytes]; //解密出来就是明文字符串的Byte数组了,可以直接转换成字符串 NSString *ret=[[NSString alloc]initWithData:myData encoding:NSUTF8StringEncoding];
MD5加密过程不可逆,一般用来做签名,代码如下
const char *cStr = [inPutText UTF8String]; unsigned char digest[16]; CC_MD5( cStr,(CC_LONG)strlen(cStr), digest ); NSData * base64 = [[NSData alloc]initWithBytes:digest length:16]; MD5加密得到的Byte数组不能直接转换为字符串,也需要做Base64或16进制转换 //NSString *ret= [IPNGTMBase64 encodeBase64Data:base64]; NSString *ret= [IPNDESUtil hexStringFromString:base64];
所有源码如下:http://download.csdn.net/detail/l964968324/8859205
多多支持~~
0 0
- iOS开发笔记(3)---- 3DES/MD5加解密
- iOS 3DES加解密
- android中的MD5、Base64、DES/3DES/ADES加解密
- ios java 3DES 加解密
- C# 加密解密(DES,3DES,MD5,Base64) 类
- 关于DES加解密,3DES加解密
- DES与3DES 加解密实例(c++)
- DES、3DES 加解密;MAC算法
- PHP des 3des加解密
- java 3DES 加解密
- openssl 3des 加解密
- 3DES加解密案例
- 3DES加解密算法
- 3DES加解密-EncryptAndDecryptFile
- 3DES加解密-KTDes3Tool
- 3DES加解密-ZipCompressor
- 3Des加解密,压缩文件
- iOS开发 OC与java相对应的3DES加解密
- hdu 1443
- [caffe]深度学习之图像分类模型VGG解读
- 最初,世上有许多令狐冲
- 关于阻止页面跳转至顶部的方法
- Android -- is 32-bit instead of 64-bit
- iOS开发笔记(3)---- 3DES/MD5加解密
- yii2-datepicker/datetimepicker插件使用
- JAVA并发包备忘录
- 【Linux 内核网络协议栈源码剖析】connect 函数剖析(一)
- 纯html 图片定高定宽,裁剪无需后台代码
- 在ruby 2 和rails 4 里面使用send_file 下载文件的时候。在IE下面中文名出现乱码的处理方式
- MyBatis架构设计及源代码分析系列(一):MyBatis架构
- jeecg t:upload 使用后台取参数问题
- plsql连接到oracle11g