本文转载至 http://blog.csdn.net/zaitianaoxiang/article/details/6650478
  • 原文链接 : http://www.yifeiyang.net/iphone-development-techniques-of-data-papers-2-iphone-encryption-program/
  • CCCryptbase64encoding

    iPhone开发技巧之数据篇(2)—iPhone程序中的加密处理

    CCCrypt

    在Objective-C语言中,加密时常用到CCCrypt(3cc)Mac OS X Manual Page。下面的代码使用 CCCrypt() ,给 NSData 类增加了AES256EncryptWithKey, AES256DecryptWithKey 方法.

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
    
    #import <CommonCrypto/CommonCryptor.h>@implementation NSData (Additions)@class NSString;- (NSData *)AES256EncryptWithKey:(NSString *)key {char keyPtr[kCCKeySizeAES256+1];bzero(keyPtr, sizeof(keyPtr));[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];NSUInteger dataLength = [self length];size_t bufferSize = dataLength + kCCBlockSizeAES128;void *buffer = malloc(bufferSize);size_t numBytesEncrypted = 0;CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding | kCCOptionECBMode,keyPtr, kCCBlockSizeAES128,NULL,[self bytes], dataLength,buffer, bufferSize,&numBytesEncrypted);if (cryptStatus == kCCSuccess) {return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];}free(buffer);return nil;}- (NSData *)AES256DecryptWithKey:(NSString *)key {char keyPtr[kCCKeySizeAES256+1];bzero(keyPtr, sizeof(keyPtr));[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];NSUInteger dataLength = [self length];size_t bufferSize = dataLength + kCCBlockSizeAES128;void *buffer = malloc(bufferSize);size_t numBytesDecrypted = 0;CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding | kCCOptionECBMode,keyPtr, kCCBlockSizeAES128,NULL,[self bytes], dataLength,buffer, bufferSize,&numBytesDecrypted);if (cryptStatus == kCCSuccess) {return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];}free(buffer);return nil;}@end
    
     

    使用的时候就像使用NSData一样。

    base64encoding

    有的时候需要向服务器上传递base64加密的数据,这个时候我们就可以像下面,给 NSData类追加newStringInBase64FromData 方法。

    123456789101112131415161718192021
    
    - (NSString *)newStringInBase64FromData {NSMutableString *dest = [[NSMutableString alloc] initWithString:@""];unsigned char * working = (unsigned char *)[self bytes];int srcLen = [self length];for (int i=0; i<srcLen; i += 3) {for (int nib=0; nib<4; nib++) {int byt = (nib == 0)?0:nib-1;int ix = (nib+1)*2;if (i+byt >= srcLen) break;unsigned char curr = ((working[i+byt] << (8-ix)) & 0x3F);if (i+nib < srcLen) curr |= ((working[i+nib] >> ix) & 0x3F);[dest appendFormat:@"%c", base64[curr]];}}return dest;}
    
     

    同样,使用的时候就像使用NSData一样。


    最终的代码如下所示 :

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
    
    ////  NSDataAdditions.h////  Copyright 2010 __MyCompanyName__. All rights reserved.//#import <Foundation/Foundation.h>@class NSString;@interface NSData (Additions)- (NSData *)AES256EncryptWithKey:(NSString *)key;- (NSData *)AES256DecryptWithKey:(NSString *)key;- (NSString *)newStringInBase64FromData;@end// -----------------------------------------------------------------------------------////  NSDataAdditions.m////  Copyright 2010 __MyCompanyName__. All rights reserved.//#import "NSDataAdditions.h"
    #import <CommonCrypto/CommonCryptor.h>static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";@implementation NSData (Additions)@class NSString;- (NSData *)AES256EncryptWithKey:(NSString *)key {char keyPtr[kCCKeySizeAES256+1];bzero(keyPtr, sizeof(keyPtr));[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];NSUInteger dataLength = [self length];size_t bufferSize = dataLength + kCCBlockSizeAES128;void *buffer = malloc(bufferSize);size_t numBytesEncrypted = 0;CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding | kCCOptionECBMode,keyPtr, kCCBlockSizeAES128,NULL,[self bytes], dataLength,buffer, bufferSize,&numBytesEncrypted);if (cryptStatus == kCCSuccess) {return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];}free(buffer);return nil;}- (NSData *)AES256DecryptWithKey:(NSString *)key {char keyPtr[kCCKeySizeAES256+1];bzero(keyPtr, sizeof(keyPtr));[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];NSUInteger dataLength = [self length];size_t bufferSize = dataLength + kCCBlockSizeAES128;void *buffer = malloc(bufferSize);size_t numBytesDecrypted = 0;CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding | kCCOptionECBMode,keyPtr, kCCBlockSizeAES128,NULL,[self bytes], dataLength,buffer, bufferSize,&numBytesDecrypted);if (cryptStatus == kCCSuccess) {return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];}free(buffer);return nil;}- (NSString *)newStringInBase64FromData {NSMutableString *dest = [[NSMutableString alloc] initWithString:@""];unsigned char * working = (unsigned char *)[self bytes];int srcLen = [self length];for (int i=0; i<srcLen; i += 3) {for (int nib=0; nib<4; nib++) {int byt = (nib == 0)?0:nib-1;int ix = (nib+1)*2;if (i+byt >= srcLen) break;unsigned char curr = ((working[i+byt] << (8-ix)) & 0x3F);if (i+nib < srcLen) curr |= ((working[i+nib] >> ix) & 0x3F);[dest appendFormat:@"%c", base64[curr]];}}return dest;}@end

转载于:https://www.cnblogs.com/Camier-myNiuer/p/3601807.html

iPhone程序中的加密处理相关推荐

  1. c语言程序中如何加密密码,在C源代码中加密密码

    有没有办法以一种在编译的应用程序中很难找到的方式保存静态密码? 我需要两个不同的应用程序.一个是Windows的轻量级FTP客户端,只连接到一个硬编码服务器. 另一个是Objective C游戏,它允 ...

  2. iphone 程序中加入表情符

    NSString *s = @"This is a smiley \ue415 face"; testFace.text = s; 上面代码就可以显示出笑脸符号,testFace是 ...

  3. iPhone程序中图片延时加载

    从网上加载图片,当网速慢或是图片较大时,你会发现程序可能会失去对用户的响应.这样你可以用多线程: -(void) buildData {   NSOperationQueue *queue = [NS ...

  4. 在iphone程序中打开word、execl、pdf等文档

    方法一: 用UIWebView就可以了 -(void)loadDocument:(NSString*)documentName inView:(UIWebView*)webView {     NSS ...

  5. java程序中用户名和密码_在Java应用程序中使用密码术

    java程序中用户名和密码 这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 ...

  6. 在Java应用程序中使用密码学

    这篇文章描述了如何使用Java密码体系结构 (JCA),该体系结构使您可以在应用程序中使用密码服务. Java密码体系结构服务 JCA提供了许多加密服务,例如消息摘要和签名 . 这些服务可以通过特定于 ...

  7. 在iPhone程序上读取PDF文件

    怎么在iPhone程序中读取PDF的内容呢?答案是,苹果为我们准备了一个很神奇的framework Q2D(Quartz 2D).Q2D提供了全套的PDF读取API,接下来我们来看看如果简单的使用Q2 ...

  8. iPhone开发中的技巧整理(四)

    iphone开发笔记 退回输入键盘 - (BOOL) textFieldShouldReturn:(id)textField{ [textField  resignFirstResponder]; } ...

  9. 在iPhone App中使用自定义字体

    如何在iPhone程序中使用自定义字体?比如要添加方正兰亭字体,首先需要一个ttf的字体库.到一些字体库的网站上去下载吧 然后把这个文件添加到工程里面  在plist里面添加 添加成功后,就可以使用啦 ...

最新文章

  1. TOMCAT6中一个警告“Parameters:Invalid chunk ignored ”
  2. 蓝桥杯-最小乘积(java)
  3. laravel 框架的 csrf
  4. python判断是否是小写字母_python判断字符串是字母 数字 大小写(转载)
  5. Ubuntu下VIM使用指南
  6. Nacos配置中心介绍
  7. 去死吧!USB转串口!!!
  8. python猜数字游戏实例_Python案例:猜数字小游戏,由浅入深!
  9. 爬虫-urlparse与urlsplit
  10. HP-UX下做磁盘镜像
  11. Python判断字符串是否为数字(数字、小数、负数、负小数、0)
  12. Microsoft visio 2013 professional破解软件
  13. HeadFirst设计模式-工厂模式(基于汽车工厂和手机工厂)
  14. Python mysql的常用操作
  15. eventscheduler mysql_Mysql 中的事件 事件调度器(Event Scheduler)
  16. Web服务器群集——Nginx企业级优化
  17. 朋友圈(java版)
  18. vue中slot-scop=“scope“
  19. python截屏_Python: 截屏
  20. java.lang.NullPointerException: null无堆栈信息

热门文章

  1. Mean Shift算法(CamShift)
  2. 【转】Service深入分析
  3. rfcomm工具的使用方法 创建/dev/rfcomm0 并检测
  4. Failed to connect to SDP server on FF:FF:FF:00:00:00: Connection refused问题解决方法
  5. Dockerfile 指令详解2
  6. 五万块钱买什么车好_10万预算买什么车好?看空间、动力和配置
  7. python 修改字符串 循环_python – 模式匹配并用if else循环替换字符串
  8. 【新功能】开放搜索多路召回技术解读
  9. 浅谈如何成为技术一号位
  10. 技术解密|阿里云多媒体 AI 团队是凭借什么拿下 CVPR2021 5冠1亚的?