NSData 加密

作者: molake | 来源:发表于2016-09-29 15:13 被阅读136次
    //molakeFramework
    //Created by molake on 16/1/13.
    //Copyright © 2016年molake. All rights reserved.
    
    #import "NSData+CCCryptUtil.h"
    #import <CommonCrypto/CommonCryptor.h>
    #import<CommonCrypto/CommonDigest.h>
    
    @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
    
    

    相关文章

      网友评论

        本文标题:NSData 加密

        本文链接:https://www.haomeiwen.com/subject/wfzkyttx.html