iOS中的AES256算法

这次只展示代码,算法原理,网上一堆,我就不介绍了。

#import "Helper.h"
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCrypto.h>
#import "TDWBase64.h"

@implementation Helper
///加密
+ (NSString *)aes256EncrytWithContent:(NSString *)content key:(NSString *)key {
    
    NSData *contentData = [content dataUsingEncoding:NSUTF8StringEncoding];
    char keyptr[kCCKeySizeAES256+1];
    bzero(keyptr, sizeof(keyptr));
    [key getCString:keyptr maxLength:sizeof(keyptr) encoding:NSUTF8StringEncoding];
    NSUInteger datalength = contentData.length;
    size_t bufferSize = datalength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesEncrypted = 0;
    
    char iv[] = {0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x38};
    
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyptr, 32, iv, contentData.bytes, datalength, buffer, bufferSize, &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess) {
        
        NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        NSString *result = [TDWBase64 stringByEncodingData:data];
        return result;
        
    } else {
        
        free(buffer);
        return nil;
    }
    
    return @"";
}

///解密
+ (NSString *)aes256DecrytWithContent:(NSString *)content key:(NSString *)key {
    
    NSData *contentData = [TDWBase64 decodeString:content];
    char keyptr[kCCKeySizeAES256+1];
    bzero(keyptr, sizeof(keyptr));
    [key getCString:keyptr maxLength:sizeof(keyptr) encoding:NSUTF8StringEncoding];
    NSUInteger datalength = contentData.length;
    size_t bufferSize = datalength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t numBytesEncrypted = 0;
    
    char iv[] = {0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x30, 0x31, 0x30, 0x38};
    
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyptr, 32, iv, contentData.bytes, datalength, buffer, bufferSize, &numBytesEncrypted);
    
    if (cryptStatus == kCCSuccess) {
        
        NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        return result;
        
    } else {
        
        free(buffer);
        return nil;
    }
    
    return @"";
}
复制代码

坑点: 1.

NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
复制代码

这个会自动释放buffer。 坑点文章:www.jianshu.com/p/706b7fd03…

2.Vi偏移量要用byte的形式写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值