博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AES加密解密
阅读量:5906 次
发布时间:2019-06-19

本文共 3232 字,大约阅读时间需要 10 分钟。

hot3.png

//

//  main.m

//  AES加密

//

//  Created by dc008 on 16/1/5.

//  Copyright © 2016 lin. All rights reserved.

//

//  AESMD5相对比base64安全性更高

#import <Foundation/Foundation.h>

#import "NSData+AES.h"

int main() {

   

    NSString *key = @"99";//钥匙

    NSString *secret = @"加密内容";//准备加密的内容

    

    //加密- (NSData *)AES256EncryptWithKey:(NSString *)key

    NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding];

    NSData *cipher = [plain AES256EncryptWithKey:key];

    NSLog(@"加密后:%@",cipher);

    

    NSString *result = [[NSString alloc]initWithData:cipher encoding:NSUTF8StringEncoding];

    NSLog(@"[[[[[%@",result);

    

    //解密- (NSData *)AES256DecryptWithKey:(NSString *)key

    for (int i = 1; i <= 100; i++) {

        plain = [cipher AES256DecryptWithKey:[NSString stringWithFormat:@"%d",i]];

         result = [[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding];

        if (result != NULL) {

            NSLog(@"%d",i);

            NSLog(@"解密后: %@",result);

        }

        

    }

//    plain = [cipher AES256DecryptWithKey:key];

//    result = [[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding];

//    NSLog(@"解密后: %@",result);

    return 0;

}

//

//  NSData+AES.h

//  oc aes

//

//  Created by 朱毅成 on 16/1/4.

//  Copyright © 2016 朱毅成. All rights reserved.

//

#import <Foundation/Foundation.h>

@interface NSData(AES)

- (NSData *)AES256EncryptWithKey:(NSString *)key;   //加密

- (NSData *)AES256DecryptWithKey:(NSString *)key;   //解密

@end

//

//  NSData+AES.m

//  oc aes

//

//  Created by 朱毅成 on 16/1/4.

//  Copyright © 2016 朱毅成. All rights reserved.

//

#import "NSData+AES.h"

#import <CommonCrypto/CommonCryptor.h>

@implementation NSData(AES)

- (NSData*)AES256EncryptWithKey:(NSString*)key {

    

    char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)

    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

    

    [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,

                                          keyPtr, kCCKeySizeAES256,

                                          NULL /* initialization vector (optional) */,

                                          [self bytes], dataLength, /* input */

                                          buffer, bufferSize, /* output */

                                          &numBytesEncrypted);

    

    if (cryptStatus == kCCSuccess) {

        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];

    }

    

    free(buffer);

    return nil;

}

- (NSData*)AES256DecryptWithKey:(NSString*)key {

    

    char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused)

    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)

    

    // fetch key data

    [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,

                                          keyPtr, kCCKeySizeAES256,

                                          NULL /* initialization vector (optional) */,

                                          [self bytes], dataLength, /* input */

                                          buffer, bufferSize, /* output */

                                          &numBytesDecrypted);

    

    if (cryptStatus == kCCSuccess) {

        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];

    }

    

    free(buffer); //free the buffer;

    return nil;

}

@end

转载于:https://my.oschina.net/u/2499773/blog/597825

你可能感兴趣的文章
内置对象Array的原型对象中添加方法
查看>>
6大设计原则
查看>>
Github简介
查看>>
CISCO2691的OSPF点对点密文测评测试
查看>>
POJ 1661 Help Jimmy(递推DP)
查看>>
Node.js 中文学习资料和教程导航
查看>>
查找(AVL平衡二叉树)
查看>>
AJAX-初学AJAX本地环境配置
查看>>
【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)...
查看>>
Linux常用基本命令( rmdir, rm, mv )
查看>>
POJ2406 Power Strings(KMP)
查看>>
JavaScript-console的使用_016
查看>>
两种方式设置iframe的高度区别
查看>>
Iterator 和 for...of 循环
查看>>
关于iOS 11.x微信连wifi流程中,在Portal页无法拉起微信问题的简单记录
查看>>
Python GUI库wxPython官网Hello World示例的逐行解释
查看>>
RE·WORK 巅峰对话:深度学习将彻底改变医疗健康领域
查看>>
Codeforces Round #442 (Div. 2) A B
查看>>
极值问题(acms)
查看>>
swift UI专项训练8 展示数据
查看>>