AES加密解密

//安全

//  main.mfetch

//  AES加密加密

//spa

//  Created by dc008 on 16/1/5.3d

//  Copyright © 2016 lin. All rights reserved.orm

//ip

//  AESMD5相對比base64安全性更高ci

#import <Foundation/Foundation.h>get

#import "NSData+AES.h"input

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

相關文章
相關標籤/搜索