Aes_Decrypt

Aes_Decrypt

@implementation NSData (PWXAes_Decrypt)

//解密

  • (NSData *)aes_decrypt:(NSString *)key{
    return [self AES256operation:kCCDecrypt key:key];
    }

//加密
-(NSData *)aes_encrypt:(NSString *)key{
return [self AES256operation:kCCEncrypt key:key];
}

  • (NSData *)AES256operation:(CCOperation)operation key:(NSString *)key{
    char keyPtr[kCCKeySizeAES256 + 1];
    bzero(keyPtr, sizeof(keyPtr));
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

    // IV
    char ivPtr[kCCBlockSizeAES128 + 1];
    bzero(ivPtr, sizeof(ivPtr));
    [kInitVector getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];

    size_t bufferSize = [self length] + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesEncrypted = 0;

CCCryptorStatus cryptorStatus = CCCrypt(operation,
                                        kCCAlgorithmAES128,
                                        kCCOptionPKCS7Padding,
                                        keyPtr,
                                        kCCKeySizeAES256,
                                        ivPtr,
                                        [self bytes],
                                        [self length],
                                        buffer,
                                        bufferSize,
                                        &numBytesEncrypted);

if(cryptorStatus == kCCSuccess){
    NSLog(@"Success");
    return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}else{
    NSLog(@"Error");
}

free(buffer);
return nil;

}

import "NSData+PWXAes_Decrypt.h"

@implementation NSString (PWXAes_Decrypt)
//解密

  • (NSString *)aes_decrypt:(NSString *)key{
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    //对数据进行加密
    NSData *result = [data aes_decrypt: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 *)aes_encrypt:(NSString *)key{

//转换为2进制Data
NSMutableData *data = [NSMutableData dataWithCapacity:self.length / 2];
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
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 aes_encrypt:key];
if (result && result.length > 0) {
    
    return [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding];
}
return nil;

}

@end

@end

你可能感兴趣的:(Aes_Decrypt)