iOS常用加密方法三种
2015-12-21 11:00
351 查看
最近做的微信海外支付,需要涉及到加密,然后我再技术群里看到了也有人在问这类的
问题,今天就顺便解答一下。
我们采用的是MD5,如下:
//
// MD5.m
//
//
#import<CommonCrypto/CommonDigest.h>
#import<CommonCrypto/CommonCrypto.h>
#import<Foundation/Foundation.h>
#include<string.h>
#import"Utility.h"
#import "MD5.h" @implementation NSString (MD5)
+ (NSString *)md5:(NSString *)str
{
constchar *concat_str = [strUTF8String];
unsignedchar result[CC_MD5_DIGEST_LENGTH];
CC_MD5(concat_str, (unsignedint)strlen(concat_str),
result);
NSMutableString *hash = [NSMutableStringstring];
for (int i =0; i
<16; i++){
[hashappendFormat:@"%02X", result[i]];
}
return [hashuppercaseString];
}
@end
还有就是base64的加密,这个加密在别的资源网站或是技术贴里面的描述的都一样,我们都需要去下载
提供使用的相关类,GTMBase64.zip库文件包,并解压,获得GTMBase64.h,GTMBase64.m和
GTMDefines.h三个文件。
下载地址是:https://github.com/r258833095/GTMBase64
新建一个base64的类,在base64.h中天假四个函数:
+ (NSString*)encodeBase64String:(NSString*)input;
+ (NSString*)decodeBase64String:(NSString*)input;
+ (NSString*)encodeBase64Data:(NSData*)data;
+ (NSString*)decodeBase64Data:(NSData*)data;
在base64.m文件中,实现上面4个函数:
+ (NSString*)encodeBase64String:(NSString* )input {
NSData*data = [inputdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES];
data = [GTMBase64encodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String;
}
+ (NSString*)decodeBase64String:(NSString* )input {
NSData*data = [inputdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES];
data = [GTMBase64decodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String
}
+ (NSString*)encodeBase64Data:(NSData*)data {
data = [GTMBase64encodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String;
}
+ (NSString*)decodeBase64Data:(NSData*)data {
data = [GTMBase64decodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String;
}
直接调用+ (NSString*)encodeBase64String:(NSString* )input和
+ (NSString*)decodeBase64String:(NSString* )input就可以进行加解密。
常用的AES
//
// AES.h
//
// Created by 张启峰 on 15/10/12.
// Copyright (c) 2015年 Tencent. All rights reserved.
//
#import
@class NSString;
@interface NSData (Encryption)
- (NSData *)AESOverCycle:(NSString *)key; //加密
- (NSData *)AESRelaes:(NSString *)key; //解密
@end
然后是.m文件
@implementation NSData (Encryption)
- (NSData *)AESOverCycle:(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 *)AESRelaes:(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
问题,今天就顺便解答一下。
我们采用的是MD5,如下:
//
// MD5.m
//
//
#import<CommonCrypto/CommonDigest.h>
#import<CommonCrypto/CommonCrypto.h>
#import<Foundation/Foundation.h>
#include<string.h>
#import"Utility.h"
#import "MD5.h" @implementation NSString (MD5)
+ (NSString *)md5:(NSString *)str
{
constchar *concat_str = [strUTF8String];
unsignedchar result[CC_MD5_DIGEST_LENGTH];
CC_MD5(concat_str, (unsignedint)strlen(concat_str),
result);
NSMutableString *hash = [NSMutableStringstring];
for (int i =0; i
<16; i++){
[hashappendFormat:@"%02X", result[i]];
}
return [hashuppercaseString];
}
@end
还有就是base64的加密,这个加密在别的资源网站或是技术贴里面的描述的都一样,我们都需要去下载
提供使用的相关类,GTMBase64.zip库文件包,并解压,获得GTMBase64.h,GTMBase64.m和
GTMDefines.h三个文件。
下载地址是:https://github.com/r258833095/GTMBase64
新建一个base64的类,在base64.h中天假四个函数:
+ (NSString*)encodeBase64String:(NSString*)input;
+ (NSString*)decodeBase64String:(NSString*)input;
+ (NSString*)encodeBase64Data:(NSData*)data;
+ (NSString*)decodeBase64Data:(NSData*)data;
在base64.m文件中,实现上面4个函数:
+ (NSString*)encodeBase64String:(NSString* )input {
NSData*data = [inputdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES];
data = [GTMBase64encodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String;
}
+ (NSString*)decodeBase64String:(NSString* )input {
NSData*data = [inputdataUsingEncoding:NSUTF8StringEncodingallowLossyConversion:YES];
data = [GTMBase64decodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String
}
+ (NSString*)encodeBase64Data:(NSData*)data {
data = [GTMBase64encodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String;
}
+ (NSString*)decodeBase64Data:(NSData*)data {
data = [GTMBase64decodeData:data];
NSString*base64String = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding] ;
returnbase64String;
}
直接调用+ (NSString*)encodeBase64String:(NSString* )input和
+ (NSString*)decodeBase64String:(NSString* )input就可以进行加解密。
常用的AES
//
// AES.h
//
// Created by 张启峰 on 15/10/12.
// Copyright (c) 2015年 Tencent. All rights reserved.
//
#import
@class NSString;
@interface NSData (Encryption)
- (NSData *)AESOverCycle:(NSString *)key; //加密
- (NSData *)AESRelaes:(NSString *)key; //解密
@end
然后是.m文件
@implementation NSData (Encryption)
- (NSData *)AESOverCycle:(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 *)AESRelaes:(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
相关文章推荐
- iOS __block用法
- iOS开发之KVC/KVO
- iOS 中使用GCD怎么让两个线程执行完结束后再去执行另一个线程
- iOS动画
- 完全封装简单的实现图片的圆形剪切效果
- 漫谈iOS程序的证书和签名机制
- ios第三方库的使用
- IOS多线程开发其实很简单
- INTEL_BIOS 编译—for-ATOM_E3800
- iOS 9.1如何隐藏和显示StatusBar
- AA记账随手记ios项目源码
- ios动画
- 用两张图片实现类似于聊天气泡等的特殊轮廓图片的效果(已封装可以自定义修改)
- iOS如何用一个字符串截取另一个字符串
- iOS 时间状态栏的隐藏和显示 重载两个函数即可
- SDWebimage 加载大量图片的时候内存泄露的解决方法(ios自学笔记)
- iOS 23-自定义cell上的button点击事件.
- iOS NSTimer定时器
- 漫谈iOS程序的证书和签名机制
- iOS开发注意事项1