zoukankan      html  css  js  c++  java
  • 加密

    #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
    
  • 相关阅读:
    Redis概述与安装
    CentOS-Linux系统下安装MySQL
    CentOS-Linux系统下安装Tomcat
    CentOS-Linux系统下安装JDK
    占位符
    设计模式之装饰者模式
    Servlet3.0
    注解入门
    PHP如何实现99乘法表?
    2017年PHP程序员未来路在何方?(转载)
  • 原文地址:https://www.cnblogs.com/yedayi/p/5784511.html
Copyright © 2011-2022 走看看