NSData(AES) 机密 解密

来源:互联网 发布:aws ubuntu root 编辑:程序博客网 时间:2024/04/30 03:27

@implementation NSData(AES)


- (NSData *) EncryptAES {

    char keyPtr[kCCKeySizeAES256+1];

    bzero( keyPtr, sizeof(keyPtr) );

    

    [_keygetCString: keyPtr maxLength: sizeof(keyPtr) encoding:NSUTF16StringEncoding];

    size_t numBytesEncrypted = 0;

    

    NSUInteger dataLength = [selflength];

    

    size_t bufferSize = dataLength + kCCBlockSizeAES128;

    void *buffer = malloc(bufferSize);

    

    CCCryptorStatus result =CCCrypt( kCCEncrypt, kCCAlgorithmAES128,kCCOptionPKCS7Padding,

                                     keyPtr, kCCKeySizeAES256,

                                     NULL,

                                     [self bytes], [self length],

                                     buffer, bufferSize,

                                     &numBytesEncrypted );

    

    if( result == kCCSuccess )

        return [NSDatadataWithBytesNoCopy:buffer length:numBytesEncrypted];

    free(buffer);

    return nil;

}


- (NSData *) DecryptAES {

    

    char  keyPtr[kCCKeySizeAES256+1];

    bzero( keyPtr, sizeof(keyPtr) );

    

    [_keygetCString: keyPtr maxLength: sizeof(keyPtr) encoding:NSUTF16StringEncoding];

    

    size_t numBytesEncrypted = 0;

    

    NSUInteger dataLength = [selflength];

    

    size_t bufferSize = dataLength + kCCBlockSizeAES128;

    void *buffer_decrypt = malloc(bufferSize);

    

    CCCryptorStatus result =CCCrypt( kCCDecrypt , kCCAlgorithmAES128,kCCOptionPKCS7Padding,

                                     keyPtr, kCCKeySizeAES256,

                                     NULL,

                                     [self bytes], [self length],

                                     buffer_decrypt, bufferSize,

                                     &numBytesEncrypted );

    

    if( result == kCCSuccess )

        return [NSDatadataWithBytesNoCopy:buffer_decrypt length:numBytesEncrypted];

    free(buffer_decrypt);

    return nil;

}


@end

原创粉丝点击