iOS des加密
2015-08-06 15:17
405 查看
des加密主要用CCCrypt函数(只有ios5中有的),这个函数的头文件:
#import CommonCrypto/CommonCryptor.h
主要思路是:
加密:
用CCCrypt函数加密一下,然后用base64编码下,传过去。
解密:
先把收到的数据根据base64,decode一下,然后再解密一下,就得到了。
关于base64编码,网上有很多写好的,直接拿来调用下就好了。
CCCryptorStatus CCCrypt(
CCOperation op,
CCAlgorithm alg,
CCOptions options,
const void *key,
size_t keyLength,
const void *iv,
const void *dataIn,
size_t dataInLength,
void *dataOut,
size_t dataOutAvailable,
size_t *dataOutMoved)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
网上找来的一个加密解密的文件(稍微改了一下):
.h文件:
+ (NSString *)encryptWithText:(NSString *)sText theKey:(NSString *)aKey;
+ (NSString *)decryptWithText:(NSString *)sText theKey:(NSString *)aKey;
.m文件:
+ (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key
{
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOperation == kCCDecrypt)
{
NSData *decryptData = [GTMBase64 decodeData:[sTextdataUsingEncoding:NSUTF8StringEncoding]];
//NSData *decryptData = [GTMBase64 decodeString:sText ];
plainTextBufferSize = [decryptData length];
vplainText = [decryptData bytes];
}
else
{
NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];
plainTextBufferSize = [encryptData length];
vplainText = (const void *)[encryptData bytes];
}
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
NSString *initVec = @"12345678";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec = (const void *) [initVec UTF8String];
CCCryptorStatus ccStatus = CCCrypt(encryptOperation,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey,
kCCKeySize3DES,
vinitVec,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSLog(@"%d",ccStatus);
NSString *result = nil;
if (ccStatus == kCCSuccess)
{
if (encryptOperation == kCCDecrypt)
{
result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtrlength:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding] ;
}
else
{
NSData *data = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [GTMBase64 stringByEncodingData:data];
// NSLog(@"result:%@",result);
// NSData *temp = [GTMBase64 decodeString:result];
}
}
return result;
}
+ (NSString *)encryptWithText:(NSString *)sText theKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:aKey];
}
+ (NSString *)decryptWithText:(NSString *)sText theKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCDecrypt key:aKey];
}
#import CommonCrypto/CommonCryptor.h
主要思路是:
加密:
用CCCrypt函数加密一下,然后用base64编码下,传过去。
解密:
先把收到的数据根据base64,decode一下,然后再解密一下,就得到了。
关于base64编码,网上有很多写好的,直接拿来调用下就好了。
CCCryptorStatus CCCrypt(
CCOperation op,
CCAlgorithm alg,
CCOptions options,
const void *key,
size_t keyLength,
const void *iv,
const void *dataIn,
size_t dataInLength,
void *dataOut,
size_t dataOutAvailable,
size_t *dataOutMoved)
__OSX_AVAILABLE_STARTING(__MAC_10_4, __IPHONE_4_0);
网上找来的一个加密解密的文件(稍微改了一下):
.h文件:
+ (NSString *)encryptWithText:(NSString *)sText theKey:(NSString *)aKey;
+ (NSString *)decryptWithText:(NSString *)sText theKey:(NSString *)aKey;
.m文件:
+ (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key
{
const void *vplainText;
size_t plainTextBufferSize;
if (encryptOperation == kCCDecrypt)
{
NSData *decryptData = [GTMBase64 decodeData:[sTextdataUsingEncoding:NSUTF8StringEncoding]];
//NSData *decryptData = [GTMBase64 decodeString:sText ];
plainTextBufferSize = [decryptData length];
vplainText = [decryptData bytes];
}
else
{
NSData* encryptData = [sText dataUsingEncoding:NSUTF8StringEncoding];
plainTextBufferSize = [encryptData length];
vplainText = (const void *)[encryptData bytes];
}
uint8_t *bufferPtr = NULL;
size_t bufferPtrSize = 0;
size_t movedBytes = 0;
bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);
bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));
memset((void *)bufferPtr, 0x0, bufferPtrSize);
NSString *initVec = @"12345678";
const void *vkey = (const void *) [key UTF8String];
const void *vinitVec = (const void *) [initVec UTF8String];
CCCryptorStatus ccStatus = CCCrypt(encryptOperation,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey,
kCCKeySize3DES,
vinitVec,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSLog(@"%d",ccStatus);
NSString *result = nil;
if (ccStatus == kCCSuccess)
{
if (encryptOperation == kCCDecrypt)
{
result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtrlength:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding] ;
}
else
{
NSData *data = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
result = [GTMBase64 stringByEncodingData:data];
// NSLog(@"result:%@",result);
// NSData *temp = [GTMBase64 decodeString:result];
}
}
return result;
}
+ (NSString *)encryptWithText:(NSString *)sText theKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCEncrypt key:aKey];
}
+ (NSString *)decryptWithText:(NSString *)sText theKey:(NSString *)aKey
{
return [self encrypt:sText encryptOrDecrypt:kCCDecrypt key:aKey];
}
相关文章推荐
- 用CocoaPods做iOS程序的依赖管理
- iOS开发系列--并行开发其实很容易
- iOS开发系列--打造自己的“美图秀秀”
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- iOS 手势添加(代码和storyboard)
- iOS开发系列--视图切换
- ios 开发超实用技巧:Xcode里批量修改 || 工程名 || 变量名 || 修改类名 || 自动封装代码Refactor功能
- iOS 获取本地IP地址
- iOS 顶部高斯模糊导航栏 + 页面内容穿越底部导航栏效果
- iOS开发中讯飞语言的使用
- iOS开发系列--iOS程序开发概览
- 强大的iOS开发必备工具
- 十个好用的 iOS 开发辅助工具与资源
- CocoaPods安装和使用教程
- 关于iOS的GCD的介绍以及使用
- IOS开源库收集整理
- iOS之NSMutableDictionary导致程序崩溃:'NSInternalInconsistencyException'
- ios ViewController 页面跳转
- IOS开发 工具片篇
- iOS ——版本更新检测 判断应用版本和升级提示