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
  • 相关阅读:
    scikitlearn中predict_proba用法 (与predict的区别)
    Sklearn,TensorFlow,keras模型保存与读取
    TensorFlow GPU 的使用
    Keras2.2 predict和fit_generator的区别
    wordcloud词云可视化
    使用scp命令,远程上传下载文件/文件夹
    L0/L1/L2范数的联系与区别
    Python中的正斜杠/与反斜杠\
    在Keras中使用tensorboard可视化acc等曲线
    Linux终端没有GUI,使用matplotlib绘图
  • 原文地址:https://www.cnblogs.com/benpaobadaniu/p/5753830.html
Copyright © 2011-2022 走看看