• 加密


    #import <Foundation/Foundation.h>
    #import <CommonCrypto/CommonDigest.h>
    #import <CommonCrypto/CommonCryptor.h>
    
    @interface NSData (AES256)
    -(NSData *) aes256_encrypt:(NSString *)key;
    -(NSData *) aes256_decrypt:(NSString *)key;
    @end
    
    #import "NSData+AES256.h"
    
    @implementation NSData (AES256)
    - (NSData *)aes256_encrypt:(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;
    }
    
    
    - (NSData *)aes256_decrypt:(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;
    }
    @end
    
    #import <Foundation/Foundation.h>
    #import <CommonCrypto/CommonDigest.h>
    #import <CommonCrypto/CommonCryptor.h>
    
    #import "NSData+AES256.h"
    
    @interface NSString (AES256)
    -(NSString *) aes256_encrypt:(NSString *)key;
    -(NSString *) aes256_decrypt:(NSString *)key;
    @end
    
    #import "NSString+AES256.h"
    
    @implementation NSString (AES256)
    -(NSString *) aes256_encrypt:(NSString *)key
    {
        const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
        NSData *data = [NSData dataWithBytes:cstr length:self.length];
        //对数据进行加密
        NSData *result = [data aes256_encrypt:key];
        
        //转换为2进制字符串
        if (result && result.length > 0) {
            
            Byte *datas = (Byte*)[result bytes];
            NSMutableString *output = [NSMutableString stringWithCapacity:result.length * 2];
            for(int i = 0; i < result.length; i++){
                [output appendFormat:@"%02x", datas[i]];
            }
            return output;
        }
        return nil;
    }
    
    -(NSString *) aes256_decrypt:(NSString *)key
    {
        //转换为2进制Data
        NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2];
        unsigned char whole_byte;
        char byte_chars[3] = {'','',''};
        int i;
        for (i=0; i < [self length] / 2; i++) {
            byte_chars[0] = [self characterAtIndex:i*2];
            byte_chars[1] = [self characterAtIndex:i*2+1];
            whole_byte = strtol(byte_chars, NULL, 16);
            [data appendBytes:&whole_byte length:1];
        }
        
        //对数据进行解密
        NSData* result = [data aes256_decrypt:key];
        if (result && result.length > 0) {
            return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
        }
        return nil;
    }
    @end
    
  • 相关阅读:
    爱迪生从事过300+个行业,并且硕果累累,诀窍不过以下3点……
    【转载】这些都是套路,但对标题党吸睛100%有用……
    【转载】有人出天价买他的一个文案标题,今天10min教会你……
    一张图看懂开源许可协议
    Git高级用法
    时频域,从傅里叶变换谈起
    【转载】数字图像处理
    摄影入门
    人像摄影
    C++语法
  • 原文地址:https://www.cnblogs.com/yedayi/p/5784511.html
Copyright © 2020-2023  润新知