iOS開發(fā)加密-iOS常用加密方法三種


看到網(wǎng)上有常用加密方法的總結,就轉存了一下,應該對我們以后有幫助

常用的是MD5加密,這是一種單向加密,實現(xiàn)如下:

需要添加的類庫:#import#import#import#include

MD5實現(xiàn)方法(16位):

+ (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];

}

還有就是base64的加密,這個加密在別的資源網(wǎng)站或是技術貼里面的描述的都一樣,我們都需要去下載

提供使用的相關類,GTMBase64.zip庫文件包,并解壓,獲得GTMBase64.h,GTMBase64.m和

GTMDefines.h三個文件。

下載地址是:https://github.com/r258833095/GTMBase64

新建一個base64的類,在base64.h中天假四個函數(shù):

+ (NSString*)encodeBase64String:(NSString*)input;

+ (NSString*)decodeBase64String:(NSString*)input;

+ (NSString*)encodeBase64Data:(NSData*)data;

+ (NSString*)decodeBase64Data:(NSData*)data;

在base64.m文件中,實現(xiàn)上面4個函數(shù):

+ (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加密,詳解:

h文件內容:

#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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容