- 浏览: 91770 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
ma_029619:
的确,打不开
用 UITableView 进行多选的代码例子 -
janedoneway:
不错,学习了,同时问一下,动画结束后同时隐藏图片,要怎么做?你 ...
[iOS]iPhoto的删除动画(转) -
cn23snyga:
博主的POST方法2.1中,怎么是 setHTTPMethod ...
[iOS]网络编程专题:发送Http请求(POST GET)的方法 -
bear1122ccc:
文件坏了。
用 UITableView 进行多选的代码例子
Encryption.h文件
// // Encryption.h // DownloadFile // // Created by zhoumin on 12-1-16. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import <Foundation/Foundation.h> @class NSString; @interface NSData (Encryption) - (NSData *)AES256EncryptWithKey:(NSString *)key; //加密 - (NSData *)AES256DecryptWithKey:(NSString *)key; //解密 - (NSString *)newStringInBase64FromData; //追加64编码 + (NSString*)base64encode:(NSString*)str; //同上64编码 @end
Encryption.m文件
// // Encryption.m // DownloadFile // // Created by on 12-1-16. // Copyright (c) 2012年 __MyCompanyName__. All rights reserved. // #import "Encryption.h" #import <CommonCrypto/CommonCryptor.h> static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; @implementation NSData (Encryption) - (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 //追加64编码 { 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; } + (NSString*)base64encode:(NSString*)str { if ([str length] == 0) return @""; const char *source = [str UTF8String]; int strlength = strlen(source); char *characters = malloc(((strlength + 2) / 3) * 4); if (characters == NULL) return nil; NSUInteger length = 0; NSUInteger i = 0; while (i < strlength) { char buffer[3] = {0,0,0}; short bufferLength = 0; while (bufferLength < 3 && i < strlength) buffer[bufferLength++] = source[i++]; characters[length++] = base64[(buffer[0] & 0xFC) >> 2]; characters[length++] = base64[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)]; if (bufferLength > 1) characters[length++] = base64[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)]; else characters[length++] = '='; if (bufferLength > 2) characters[length++] = base64[buffer[2] & 0x3F]; else characters[length++] = '='; } NSString *g = [[[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES] autorelease]; return g; } @end
测试
NSString *key = @"my password"; NSString *secret = @"text to encrypt"; //加密 NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding]; NSData *cipher = [plain AES256EncryptWithKey:key]; NSLog(@"%@",[[cipher newStringInBase64FromData] autorelease]); printf("%s\n", [[cipher description] UTF8String]); NSLog(@"%@", [[[NSString alloc] initWithData:cipher encoding:NSUTF8StringEncoding] autorelease]);//打印出null,这是因为没有解密。 //解密 plain = [cipher AES256DecryptWithKey:key]; printf("%s\n", [[plain description] UTF8String]); NSLog(@"%@", [[[NSString alloc] initWithData:plain encoding:NSUTF8StringEncoding] autorelease]); //打印出secret的内容,用密码解密过了。如果使用错误的密码,则打印null
demo下载:http://download.csdn.net/detail/z251257144/4820200
发表评论
-
[iOS]iPhoto的删除动画(转)
2012-03-05 09:36 3191iPhoto 中想删除某张照片时,点击删除键,就能看到照 ... -
testBubble_泡泡聊天
2012-02-29 11:38 1155testBubble_zhou_min_泡泡聊天 ... -
BigHeadTip_谷歌地图大头针
2012-02-29 11:34 1641BigHeadTip_zhou_min_谷歌地图大头针 ... -
FFDownloadManager_alertview文件下载器
2012-02-29 11:28 1074FFDownloadManager_zhou_min_aler ... -
苹果官网--iPhone应用程序编程指南
2012-02-29 11:21 1030苹果官网-zhou_min-iPhone应用程序编程指南 ... -
iOS之GCD
2012-02-12 21:35 0GCD之dispatch queue iOS中 ... -
循环滚动
2012-02-02 15:19 0循环滚动 -
自定义AlertView(多种色彩)
2012-02-02 14:50 1166自定义AlertView(多种色彩) ... -
用 UITableView 进行多选的代码例子
2012-02-02 14:19 1621用 UITableView 进行多选的代码例子 ... -
QQ风格的UITableView
2012-02-02 14:00 1321QQ风格的UITableView ... -
GLpaint画图
2012-02-01 23:50 1854GLpaint画图 -
滑动弹出菜单的代码例子
2012-02-01 23:31 1212滑动弹出菜单的代码例子可在应用中实现方便美观的按钮收放效果。如 ... -
UIAlertTableView 里进行单选和多选的代码例子
2012-02-01 23:22 1159UIAlertTableView 里进行单选和多选的代码例子 ... -
自定义控件用法和一些常用页面效果
2012-02-01 22:23 1026自定义控件用法和一些常用页面效果 原文:http:// ... -
viewDidUnload 和 dealloc 的区别
2012-01-30 10:57 7493对于iphone开发人员来说,内存管理是极为重要的技巧,哪怕程 ... -
第二个iPhone应用程序:“Say Hello”
2012-01-30 10:49 1368项目需求 写一个iPhone应用程序,要求可以输入名字, ... -
[iOS]网页保存为png
2012-01-20 10:48 0保存 -
[iOS]iOS截屏
2012-01-19 17:22 2758UIGraphicsBeginImageContext ... -
[iOS]iOS对PDF加密,解密
2012-01-16 17:34 3205保护PDF内容为了保护PDF ... -
[iOS]Objective-C利用协议实现回调函数(类似java的回调函数)
2012-01-01 13:18 7915在编写iphone开发时,最 ...
相关推荐
在iOS中,苹果提供了一个名为CommonCrypto的框架,它包含了AES加密的实现。在Objective-C项目中,我们需要添加`#import <CommonCrypto/CommonCrypto.h>`来使用这些功能。 接着,我们定义加密和解密的函数。加密通常...
在iOS和Android平台上实现AES加密解密是开发者经常遇到的任务,尤其对于需要跨平台传输和存储敏感信息的场景。本篇文章将详细探讨AES加密解密算法在iOS和Android平台上的实现原理以及具体步骤。 首先,AES算法基于...
在项目"AesTest"中,你可以找到一个简单的AES加密测试示例,它演示了如何在iOS应用中实现AES加密和解密的功能。通过这个例子,你可以更好地理解如何将AES加密应用到实际的iOS项目中,从而保护用户的隐私数据,确保...
本篇将详细介绍如何在iOS应用中实现AES加密解密。 一、AES加密原理 AES加密基于替换和置换操作,通过128位的块进行加密,密钥长度可以是128、192或256位。在加密过程中,原始数据会被分成128位的块,然后通过一系列...
在iOS中,我们可以使用CommonCrypto库来实现AES加密。这个库提供了C语言接口,可以方便地集成到Objective-C或Swift项目中。以下是一个简单的AES加密示例: ```objc #import - (NSData *)AES256EncryptWithKey:...
本篇文章将深入探讨AES加密在Java、Android、iOS以及C#中的应用,以及如何实现这些平台之间的通用加密方式。 AES,即高级加密标准,是一种块密码,采用128位的块大小进行操作,并支持128、192和256位的密钥长度。其...
本教程将详细介绍如何在iOS平台上实现AES128的加密与解密。 ### 一、AES128加密原理 AES128使用128位(16字节)的密钥对数据进行加密,其工作模式包括ECB(Electronic Codebook)、CBC(Cipher Block Chaining)、...
在实现AES加密时,需要注意以下几点: 1. 密钥管理:密钥应该安全存储,避免明文暴露。在Android上,可以考虑使用Keystore System;在iOS上,可以使用Keychain。 2. IV(初始化向量):在CBC等模式下,每次加密都...
java、Android、javaScript(可以改成vue)、ios AES加密通用,可在服务端加密,客户端解密,也可在客户端加密,服务端解密;由于csdn会自动把积分改到50,可以发邮件到1622007541@qq.com 免费送
本主题将深入探讨如何在iOS环境下使用AES加密技术,以及如何在实际应用中实现数据存储和传输的加密。 AES加密的基本原理是通过一系列的替换、混淆和扩展操作,将明文数据转化为密文,以防止未经授权的访问。它支持...
- **iOS**:在iOS中,可以使用CommonCrypto库来实现AES加密,这个库包含在Security框架中。 - **.NET**:.NET Framework和.NET Core都提供了System.Security.Cryptography命名空间,用于加密操作,包括AES。 压缩包...
本篇文章将深入探讨AES ECB加密在iOS开发中的应用、原理以及如何实现。 AES是一种分组密码,将明文数据分为固定大小的块进行加密。标准的AES有128、192和256位的密钥长度,其中128位是最常用的选择。在ECB模式下,...
在这个开源项目中,我们将探讨如何在Android和iOS平台上实现AES加密。以下是对这个项目的详细讲解。 1. **AES加密原理**: AES是基于块密码,每个加密块大小为128位。它使用128、192或256位的密钥来加密128位的...
在这个项目中,开发者wyxlh提供了Objective-C实现的AES加密和解密功能,便于iOS开发者集成到自己的应用程序中。 AES加密是一种块密码,它基于替换和置换操作,使用相同的密钥进行加密和解密。AES有三个主要参数:...
文件"js aes.txt"可能是JavaScript实现AES加密的示例代码,而"AES加密 – iOS与Java的同步实现"可能是介绍如何在iOS和Java之间实现同步加密的教程或代码示例。通过学习这些内容,开发者可以掌握如何在不同平台上实现...
在iOS中,我们可以通过扩展`NSData`类来实现AES的加密和解密操作。文件`NSData+AES256.h`和`NSData+AES256.m`很可能包含了这样的扩展方法。通常,这些方法会包含以下步骤: 1. **密钥准备**:首先需要一个AES密钥,...
本篇将深入探讨AES加密在iOS开发中的应用,以及如何在实际项目中实现AES加密源代码。 首先,AES是一种块密码,它对数据进行128位的块处理。它支持三种不同的密钥长度:128位、192位和256位,其中128位是最常用的...
在本案例中,我们讨论的是一个针对iOS平台的AES加密实现,特别是针对.NET代码的修改。 原始代码可能在进行BASE64编码时遇到了问题,因为BASE64编码中包含的'='和'/'字符在URL中可能会引起解析问题。在URL中,某些...