Objective-C密碼編譯演算法

來源:互聯網
上載者:User
#import <CommonCrypto/CommonDigest.h>#import <CommonCrypto/CommonCryptor.h>//MD5- (NSString*)md5Hash {    unsigned char result[CC_MD5_DIGEST_LENGTH];    CC_MD5([self bytes], [self length], result);        return [NSString stringWithFormat:            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",            result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],            result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15]            ];}//SHA1- (NSString*)sha1Hash {    unsigned char result[CC_SHA1_DIGEST_LENGTH];    CC_SHA1([self bytes], [self length], result);        return [NSString stringWithFormat:            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",            result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],            result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15],            result[16], result[17], result[18], result[19]            ];}
///////////////////////////////////////////////////////////////////////////////////////////////////// base64 code found on http://www.cocoadev.com/index.pl?BaseSixtyFour// where the poster released it to public domain// style not exactly congruous with normal three20 style, but kept mostly intact with the originalstatic const char encodingTable[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";///////////////////////////////////////////////////////////////////////////////////////////////////+ (NSData*)dataWithBase64EncodedString:(NSString *)string {    if ([string length] == 0)        return [NSData data];        static char *decodingTable = NULL;    if (decodingTable == NULL)    {        decodingTable = malloc(256);        if (decodingTable == NULL)            return nil;        memset(decodingTable, CHAR_MAX, 256);        NSUInteger i;        for (i = 0; i < 64; i++)            decodingTable[(short)encodingTable[i]] = i;    }        const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];    if (characters == NULL)     //  Not an ASCII string!        return nil;    char *bytes = malloc((([string length] + 3) / 4) * 3);    if (bytes == NULL)        return nil;    NSUInteger length = 0;        NSUInteger i = 0;    while (YES)    {        char buffer[4];        short bufferLength;        for (bufferLength = 0; bufferLength < 4; i++)        {            if (characters[i] == '\0')                break;            if (isspace(characters[i]) || characters[i] == '=')                continue;            buffer[bufferLength] = decodingTable[(short)characters[i]];            if (buffer[bufferLength++] == CHAR_MAX)      //  Illegal character!            {                free(bytes);                return nil;            }        }                if (bufferLength == 0)            break;        if (bufferLength == 1)      //  At least two characters are needed to produce one byte!        {            free(bytes);            return nil;        }                //  Decode the characters in the buffer to bytes.        bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4);        if (bufferLength > 2)            bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2);        if (bufferLength > 3)            bytes[length++] = (buffer[2] << 6) | buffer[3];    }        realloc(bytes, length);    return [NSData dataWithBytesNoCopy:bytes length:length];}///////////////////////////////////////////////////////////////////////////////////////////////////- (NSString *)base64Encoding {    if ([self length] == 0)        return @"";        char *characters = malloc((([self length] + 2) / 3) * 4);    if (characters == NULL)        return nil;    NSUInteger length = 0;        NSUInteger i = 0;    while (i < [self length])    {        char buffer[3] = {0,0,0};        short bufferLength = 0;        while (bufferLength < 3 && i < [self length])            buffer[bufferLength++] = ((char *)[self bytes])[i++];                // Encode the bytes in the buffer to four characters,        // including padding "=" characters if necessary.        characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];        characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];        if (bufferLength > 1)            characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];        else characters[length++] = '=';        if (bufferLength > 2)            characters[length++] = encodingTable[buffer[2] & 0x3F];        else characters[length++] = '=';    }        return [[[NSString alloc] initWithBytesNoCopy:characters length:length                                         encoding:NSASCIIStringEncoding freeWhenDone:YES]            autorelease];}// end recycled base64 code///////////////////////////////////////////////////////////////////////////////////////////////////
#import <CommonCrypto/CommonDigest.h>#import <CommonCrypto/CommonCryptor.h>//AES加密- (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;}//AES解密- (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,                                          kCCOptionPKCS7Padding | kCCOptionECBMode,                                          keyPtr, kCCBlockSizeAES128,                                          NULL,                                          [self bytes], dataLength,                                          buffer, bufferSize,                                          &numBytesDecrypted);           if (cryptStatus == kCCSuccess) {        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];    }        free(buffer);    return nil;    }

作者:Tracy E

出處:http://www.cnblogs.com/tracy-e

本文著作權歸作者和部落格園共有,歡迎轉載,但轉載請註明原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.