iOS常用加密方法(aes、md5、base64)
1、代码
iOS常用加密方法(aes、md5、base64) 、AES加密
NSData+AES.h文件 //
// NSData-AES.h
// Smile
//
// Created by 周 敏 on 12-11-24.
// Copyright (c) 2012年 BOX. All rights reserved.
// #import <Foundation/Foundation.h> @class NSString; @interface NSData (Encryption) - (NSData *)AES256EncryptWithKey:(NSString *)key; //加密
- (NSData *)AES256DecryptWithKey:(NSString *)key; //解密 @end NSData+AES.m文件 //
// NSData-AES.h
// Smile
//
// Created by 周 敏 on 12-11-24.
// Copyright (c) 2012年 BOX. All rights reserved.
// #import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h> @implementation NSData (Encryption) - (NSData *)AES256EncryptWithKey:(NSString *)key {//加密
char keyPtr[kCCKeySizeAES256+];
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 = ;
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+];
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 = ;
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
这里AES在iOS加过密以后以nsdata的形式存下来,如果想以nsstring形式存储,那么对nsdata进行base64位编码。 、BASE64编码
首先下载GTMBase64文件,在工程中加入三个文件
GTMDefines.h
GTMBase64.h
GTMBase64.m
你可以在这里找到这三个文件
http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/?r=87
你也可以在下面的demo里面找到这3个文件,demo会完整实现文章里面常用的3种编码方法。
我在此稍微封装一下: .h文件 #pragma mark - base64
+ (NSString*)encodeBase64String:(NSString *)input;
+ (NSString*)decodeBase64String:(NSString *)input;
+ (NSString*)encodeBase64Data:(NSData *)data;
+ (NSString*)decodeBase64Data:(NSData *)data; .m文件 #pragma mark - base64
+ (NSString*)encodeBase64String:(NSString * )input {
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
data = [GTMBase64 encodeData:data];
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
return base64String;
} + (NSString*)decodeBase64String:(NSString * )input {
NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
data = [GTMBase64 decodeData:data];
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
return base64String;
} + (NSString*)encodeBase64Data:(NSData *)data {
data = [GTMBase64 encodeData:data];
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
return base64String;
} + (NSString*)decodeBase64Data:(NSData *)data {
data = [GTMBase64 decodeData:data];
NSString *base64String = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
return base64String;
} 、MD5加密 www.2cto.com
NSString+MD5.h文件 //
// NSString+MD5Encrypt.h
// Smile
//
// Created by 周 敏 on 12-11-24.
// Copyright (c) 2012年 BOX. All rights reserved.
// #import <CommonCrypto/CommonDigest.h> @interface NSString (MD5) - (NSString *)md5Encrypt; @end NSString+MD5.m文件 //
// NSString+MD5Encrypt.h
// Smile
//
// Created by 周 敏 on 12-11-24.
// Copyright (c) 2012年 BOX. All rights reserved.
// #import "NSString+MD5.h" @implementation NSString (MD5) - (NSString *)md5Encrypt {
const char *original_str = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(original_str, strlen(original_str), result);
NSMutableString *hash = [NSMutableString string];
for (int i = ; i < ; i++)
[hash appendFormat:@"%02X", result[i]];
return [hash lowercaseString];
} @end
2、调用方法:
#import "SecurityUtil.h"
NSString *testString = @"test";
方法1:(不可逆转)
NSLog(@"======BASE64:%@======", [SecurityUtil encodeBase64String:testString]);
方法2:(不可逆转)
NSLog(@"======MD5:%@=======", [SecurityUtil encryptMD5String:testString]);
方法3:(可逆转)
NSData *aesData = [SecurityUtil encryptAESData:testString];
NSLog(@"=====AES加密:%@=========", aesData);
NSLog(@"=======AES解密:%@======", [SecurityUtil decryptAESData:aesData]);
方法4:组合方法
比如将MD5结果值进行BASE64加密等等,从而加大破解难度
demo含有这3种的使用方式,在AppDelegate.m文件里面,不会使用的自己参考一下
http://up.2cto.com/2012/1215/20121215123257741.zip
ps:http://www.2cto.com/kf/201212/176351.html
iOS常用加密方法(aes、md5、base64)的更多相关文章
- iOS常用公共方法
iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...
- iOS 常用公共方法
iOS常用公共方法 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat size = 0.0; NSError *error; N ...
- IOS开发之----常用加密方法
本文转载至 http://blog.csdn.net/wildfireli/article/details/23191983 (AES.MD5.Base64) 分类: iPhone 2014-04-0 ...
- iOS常用加密之RSA加密解密
前言: iOS常用的加密有很多种,前两天在工作中遇到了RSA加密,现在把代吗分享出来. RSA基本原理 RSA使用"秘匙对"对数据进行加密解密.在加密解密数据前,需要先生成公钥(p ...
- C#常用加密方法
using System; using System.IO; using System.Security.Cryptography; using System.Text; /// <summar ...
- 你遗忘的都在这里—iOS常用类型方法笔记
这些都是项目中常用但又常忘的方法,与大家分享一下. 一.NSString 创建字符串. NSString *astring = @"This is a String!"; 创建空 ...
- .NET和JAVA同等加密方法,MD5和DES对称加密记录
C#版: using System; using System.Security.Cryptography; using System.Text; namespace ConsoleApplicati ...
- IOS常用加密GTMBase64
GTMDefines.h // // GTMDefines.h // // Copyright 2008 Google Inc. // // Licensed under the Apache Lic ...
- IOS常用加密Encryption
NSString+Encryption.h // // NSString+Encryption.h // haochang // // Created by Administrator on 14-4 ...
随机推荐
- php编译参数注释
1. 指定安装路径 --prefix=PREFIX 2. 指定运行用户 --with-fpm-user=nginx 3. 指定运行组 --with-fpm-group=nginx 3.与'--pref ...
- JQuery 各节点获取函数:父节点,子节点,兄弟节点
jQuery.parent(expr) //找父元素 jQuery.parents(expr) //找到所有祖先元素,不限于父元素 jQuery.children ...
- Mysql5.7.19压缩版安装步骤及踩过的坑
安装Mysql5.7.19压缩版 一:下载压缩包 1.从MySQL官网下载MySQL Community Server 5.7.19,此版本为免费版. 2.下载完成之后解压缩,打开之后文件夹如下: ...
- 一个简单http请求的jmeter压测实战流程
1.新建线程组 2.创建http请求 注意:接口路径中的参数值要写变量 3.创建txt文件,存多个参数值 4.创建csv文件,在csv中上传txt文件 5.variable name填写txt中参数值 ...
- [RxJS] How To get the results of two HTTP requests made in sequence
switchMap can chain two HTTP requests together, creating one request based on the results of the fir ...
- StringBuilder和String的区别
使用 StringBuilder 语言 C# String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为 ...
- Android java取得实时上周的时间
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Te ...
- jQuery常用的API
1.jQuery给标签添加子元素(父子关系) jQuery对象.append("子"); 将div标签插入到ul标签之后 $("ul").append($('d ...
- Netty原理和使用
性能主题 Netty原理和使用 Netty是一个高性能 事件驱动的异步的非堵塞的IO(NIO)框架,用于建立TCP等底层的连接,基于Netty可以建立高性能的Http服务器.支持HTTP. WebSo ...
- RabbitMQ安全相关的网络资源介绍
无法用guest远程訪问RabbitMQ的的解决方式 Can't access RabbitMQ web management interface after fresh install http:/ ...