【iOS】加密算法整理

来源:互联网 发布:pandora 16.02 软件源 编辑:程序博客网 时间:2024/06/05 01:57

1、MD5:


- (NSString *)getMd5_32Bit {    const char *cStr = [self UTF8String];    unsigned char digest[CC_MD5_DIGEST_LENGTH];    CC_MD5( cStr, strlen(cStr), digest);    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)        [result appendFormat:@"%02x", digest[i]];    return result;}


2、AED:

- (NSData *)AES256EncryptWithKey:(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 *)AES256DecryptWithKey:(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, kCCOptionECBMode|kCCOptionPKCS7Padding, keyPtr, kCCBlockSizeAES128, NULL, [self bytes], dataLength, buffer, bufferSize, &numBytesDecrypted);    if (cryptStatus == kCCSuccess) {        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];    }        free(buffer);    return nil;}

3、DES

+ (NSString *)TripleDES:(NSString *)plainText encryptOrDecrypt:(CCOperation)encryptOrDecrypt                withKey:(NSString *)DESKEY  {    const void *vPlainText;    size_t plainTextBufferSize;    if (encryptOrDecrypt == kCCDecrypt) {        NSData *EncryptData = [GTMBase64 decodeData:[plainText dataUsingEncoding:NSUTF8StringEncoding]];        plainTextBufferSize = [EncryptData length];        vPlainText = [EncryptData bytes];    } else {        NSData *data = [plainText dataUsingEncoding:NSUTF8StringEncoding];        plainTextBufferSize = [data length];        vPlainText = (const void *)[data bytes];    }        CCCryptorStatus ccStatus;    uint8_t *bufferPtr = NULL;    size_t bufferPtrSize = 0;    size_t moveBytes = 0;        bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);    bufferPtr =  malloc(bufferPtrSize * sizeof(uint8_t));    memset((void *)bufferPtr, 0x0, bufferPtrSize);        const void *vkey = (const void *)[DESKEY UTF8String];    ccStatus = CCCrypt(encryptOrDecrypt, kCCAlgorithm3DES, kCCOptionECBMode|kCCOptionPKCS7Padding, vkey, kCCKeySize3DES, nil, vPlainText, plainTextBufferSize, (void *)bufferPtr, bufferPtrSize, &moveBytes);      NSString *result;    if (encryptOrDecrypt == kCCDecrypt) {        result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)moveBytes] encoding:NSUTF8StringEncoding];    } else {        NSData *data = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger) moveBytes];        result = [GTMBase64 stringByEncodingData:data];    }        return result;}

注意引入头文件:#import <CommonCrypto/CommonCrypto.h>

0 0
原创粉丝点击