ios 加密 方法

未命名:

MD5  不可逆的加密算法 


方法CC_MD5可以获取MD5的16个字符的数组,再通过%02X的形式输出即可获取32位MD5值。

#import <CommonCrypto/CommonDigest.h>  

@implementation NSString (CCCryptUtil)

-(NSString*) md5 {

    const char * cStrValue = [self UTF8String];

    unsigned char theResult[CC_MD5_DIGEST_LENGTH];

    CC_MD5(cStrValue, strlen(cStrValue), theResult);

    return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

            theResult[0], theResult[1], theResult[2], theResult[3], 

            theResult[4], theResult[5], theResult[6], theResult[7], 

            theResult[8], theResult[9], theResult[10], theResult[11], 

            theResult[12], theResult[13], theResult[14], theResult[15]];

}

@end

AES


@implementation NSData (CCCryptUtil)

- (NSData*)AES256EncryptWithKey:(NSString*)key {
 
char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
 
 [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,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
 [self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
 &numBytesEncrypted);
 
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
 }
 
free(buffer);
return nil;
}

- (NSData*)AES256DecryptWithKey:(NSString*)key {
 
char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)
bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
 
 // fetch key data
 [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,
keyPtr, kCCKeySizeAES256,
NULL /* initialization vector (optional) */,
 [self bytes], dataLength, /* input */
buffer, bufferSize, /* output */
 &numBytesDecrypted);
 
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
 }
 
free(buffer); //free the buffer;
return nil;
}

@end


////

@implementation NSString (CCCryptUtil)

// md5方法此处省略

+ (NSData*)AES256Encrypt:(NSString*)strSource withKey:(NSString*)key {
NSData *dataSource = [strSource dataUsingEncoding:NSUTF8StringEncoding];
return [dataSource AES256EncryptWithKey:[key md5]];
}

+ (NSString*)AES256Decrypt:(NSData*)dataSource withKey:(NSString*)key {
NSData *decryptData = [dataSource AES256DecryptWithKey:[key md5]];
return [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding];
}

@end

BASE64


首先下载GTMBase64文件,在工程中加入三个文件

GTMDefines.h

GTMBase64.h

GTMBase64.m

你可以在这里找到这三个文件

https://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;  

}  

评论
热度 ( 1 )

© 小小技术博客 | Powered by LOFTER