美文网首页
Aes_Decrypt

Aes_Decrypt

作者: 七月不下雨 | 来源:发表于2022-06-28 10:19 被阅读0次

    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

          本文链接:https://www.haomeiwen.com/subject/aueavrtx.html