常見的iOS代碼加密常用加密方式包括Base64加密荤西、MD5加密、AES加密戏蔑、RSA加密等糜芳。
Base64加密
Base64加密特點(diǎn):
- 數(shù)據(jù)加密之后,數(shù)據(jù)量會變大妖枚,變大1/3左右廷臼。
- 可進(jìn)行反向解密。
- 編碼后有個(gè)非常顯著的特點(diǎn),末尾有個(gè)=號荠商。
加密過程:
+ (NSString*)base64EncodedStringWithData:(NSData*)data{
//判斷是否傳入需要加密數(shù)據(jù)參數(shù)
if((data ==nil) || (data ==NULL)) {
return nil; }
else if (![data isKindOfClass:[NSDataclass]]) {
return nil; ?}?
//判斷設(shè)備系統(tǒng)是否滿足條件
if([[[UIDevicecurrentDevice] systemVersion] doubleValue] <=6.9) {
return nil; }
//使用系統(tǒng)的API進(jìn)行Base64加密操作
NSDataBase64EncodingOptionsoptions;?
?options =NSDataBase64EncodingEndLineWithLineFeed;
return [data base64EncodedStringWithOptions:options];
}
解密過程:
+ (NSData*)base64DecodeDataWithString:(NSString*)string{
//判斷是否傳入需要加密數(shù)據(jù)參數(shù)
if((string ==nil) || (string ==NULL)) {
return nil; }
elseif(![string isKindOfClass:[NSStringclass]]) {
return nil; }
//判斷設(shè)備系統(tǒng)是否滿足條件
if([[[UIDevicecurrentDevice] systemVersion] doubleValue] <=6.9) {
return nil; }
//使用系統(tǒng)的API進(jìn)行Base64解密操作
NSDataBase64DecodingOptionsoptions;?
?options =NSDataBase64DecodingIgnoreUnknownCharacters;
return [[NSData alloc] initWithBase64EncodedString:string options:options];}
MD5加密(MD5是一種摘要寂恬,而非加密,只是經(jīng)常與加密配合使用)
//對字符串?dāng)?shù)據(jù)進(jìn)行MD5的簽名
+ (NSString *)md5SignWithString:(NSString *)string{ ? ?
? ? const char *object = [string UTF8String];
? ? unsigned char result[CC_MD5_DIGEST_LENGTH];
? ? CC_MD5(object,(CC_LONG)strlen(object),result);
? ? NSMutableString *hash = [NSMutableString string];
? ? for (int i = 0; i < 16; i ++) {
? ? ? ? [hash appendFormat:@"%02X", result[i]];
? ? }
? ? return [hash lowercaseString];
} ??
//對二進(jìn)制數(shù)據(jù)進(jìn)行MD5的簽名
+ (NSData *)md5SignWithData:(NSData *)data{
Byte byte[CC_MD5_DIGEST_LENGTH]; ? ?//定義一個(gè)字節(jié)數(shù)組來接收結(jié)果 CC_MD5((const void*)([data bytes]), (CC_LONG)[data length], byte);
return ?[NSData dataWithBytes:byte length:CC_MD5_DIGEST_LENGTH];}
因?yàn)樗{(lán)牙4.0芯片自帶AES128加密算法,所以只要涉及到藍(lán)牙開發(fā)都會使用AES128加密算法
加密方法:
+(NSMutableData*)AES_NEW_AESEn:(NSMutableData*)plain pass:(NSMutableData*)key
{
// NSLog(@"key是%@",key);
charkeyPtr[kCCKeySizeAES128+1];
memset(keyPtr,0,sizeof(keyPtr));
[keygetBytes:keyPtrlength:sizeof(keyPtr)];
//NSLog(@"加密的KEY是%s",keyPtr);
NSData* data = [[NSDataalloc]initWithData:plain];
NSUIntegerdataLength = [datalength];
size_tbufferSize = dataLength +kCCBlockSizeAES128;
void*buffer =malloc(bufferSize);
size_tnumBytesEncrypted =0;
CCCryptorStatuscryptStatus =CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionPKCS7Padding|kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
NULL,
[databytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if(cryptStatus ==kCCSuccess) {
NSMutableData*resultData = [NSMutableDatadataWithBytes:bufferlength:numBytesEncrypted];
returnresultData;
}
free(buffer);
returnnil;
}
解密方法:
+(NSMutableData*)AES_NEW_AESDecrypt:(NSMutableData*)encryptText password:(NSMutableData*)key
{
charkeyPtr[kCCKeySizeAES128+1];
memset(keyPtr,0,sizeof(keyPtr));
[keygetBytes:keyPtrlength:sizeof(keyPtr)];
NSData*data=[[NSDataalloc]initWithData:encryptText];
NSUIntegerdataLength = [datalength];
size_tbufferSize = dataLength +kCCBlockSizeAES128;
void*buffer =malloc(bufferSize);
size_tnumBytesCrypted =0;
CCCryptorStatuscryptStatus =CCCrypt(kCCDecrypt,
kCCAlgorithmAES128,
kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
NULL,
[databytes],
dataLength,
buffer,
bufferSize,
&numBytesCrypted);
if(cryptStatus ==kCCSuccess) {
NSMutableData*resultData = [NSMutableDatadataWithBytesNoCopy:bufferlength:numBytesCrypted];
returnresultData;
}
free(buffer);
returnnil;
}
解密的時(shí)候沒帶 ?kCCOptionPKCS7Padding 如果發(fā)現(xiàn)需要就加上