您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: