zoukankan      html  css  js  c++  java
  • 使用 NSData 分类实现,对 NSData 数据类型进行 AES 加密

    一般对NSData的数据类型进行加密,这里就将 .h .m 文件分享出来,有需要的可以直接粘贴使用。
     
     
    下面是 .h 文件

     
    #import <Foundation/Foundation.h>

    @interface NSData (AES)

    /**
     *  加密,使用字符串作为key
     */
    - (NSData *)AES128EncryptWithKey:(NSString *)key;

    /**
     *  加密,使用NSData作为key
     */
    - (NSData *)AES128EncryptWithKeyData:(NSData *)keyData;

    /**
     *  解密,使用字符串作为key
     */
    - (NSData *)AES128DecodeWithKey:(NSString *)key;


    /**
     *  解密,使用NSData作为key
     */
    - (NSData *)AES128DecodeWithKeyData:(NSData *)keyData;

    @end
     
     
     
    下面是 .m 文件

     
     
    #import "NSData+AES.h"
    #import <CommonCrypto/CommonCrypto.h>

    @implementation NSData (AES)

    // 加密,使用字符串作为key
    - (NSData *)AES128EncryptWithKey:(NSString *)key {
        char keyPtr[kCCKeySizeAES256+1];
        bzero(keyPtr, sizeof(keyPtr));
        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
        NSUInteger dataLength = [selflength];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,
                                              keyPtr, kCCBlockSizeAES128,
                                              NULL,
                                              [selfbytes], dataLength,
                                              buffer, bufferSize,
                                              &numBytesEncrypted);
        if (cryptStatus == kCCSuccess) {
            return [NSDatadataWithBytesNoCopy:buffer length:numBytesEncrypted];
        }
        free(buffer);
        returnnil;
    }

    // 加密,使用NSData作为key
    - (NSData *)AES128EncryptWithKeyData:(NSData *)keyData {
        char keyPtr[kCCKeySizeAES256+1];
        bzero(keyPtr, sizeof(keyPtr));
        NSUInteger dataLength = [selflength];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,
                                              keyData.bytes, kCCBlockSizeAES128,
                                              NULL,
                                              [selfbytes], dataLength,
                                              buffer, bufferSize,
                                              &numBytesEncrypted);
        if (cryptStatus == kCCSuccess) {
            return [NSDatadataWithBytesNoCopy:buffer length:numBytesEncrypted];
        }
        free(buffer);
        returnnil;
    }

    //解密,使用字符串作为key
    - (NSData *)AES128DecodeWithKey:(NSString *)key {
        char keyPtr[kCCKeySizeAES256+1];
        bzero(keyPtr, sizeof(keyPtr));
        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
        NSUInteger dataLength = [selflength];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesDecrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,
                                              keyPtr, kCCBlockSizeAES128,
                                              NULL,
                                              [selfbytes], dataLength,
                                              buffer, bufferSize,
                                              &numBytesDecrypted);
        if (cryptStatus == kCCSuccess) {
            return [NSDatadataWithBytesNoCopy:buffer length:numBytesDecrypted];
        }
        free(buffer);
        returnnil;
    }

    //解密,使用NSData作为key
    - (NSData *)AES128DecodeWithKeyData:(NSData *)keyData {
        char keyPtr[kCCKeySizeAES256+1];
        bzero(keyPtr, sizeof(keyPtr));
    //    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
        NSUInteger dataLength = [selflength];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesDecrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,
                                              keyData.bytes, kCCBlockSizeAES128,
                                              NULL,
                                              [selfbytes], dataLength,
                                              buffer, bufferSize,
                                              &numBytesDecrypted);
        if (cryptStatus == kCCSuccess) {
            return [NSDatadataWithBytesNoCopy:buffer length:numBytesDecrypted];
        }
        free(buffer);
        returnnil;
    }

    @end
  • 相关阅读:
    html优化
    HTML练习(网页计算器)
    hdu--4574 Bombs(dfs)
    Robots at Warehouse(搜索+vector的使用)
    poj 2111 Millenium Leapcow(记忆化搜索)
    Codeforces Round #408 (Div. 2) C. Bank Hacking(暴力啊!暴力)
    Gym
    Gym
    浙江省赛--D
    浙江省赛--C
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/5753830.html
Copyright © 2011-2022 走看看