zoukankan      html  css  js  c++  java
  • iOS,信息加解密

    1.AES加解密

    AES加解密

     //  AESEncryptAndDecrypt.h文件

    //
    //  AESEncryptAndDecrypt.h
    //  NSData扩展方法,用于处理aes加解密
    //
    //  Created by Vie on 16/4/7.
    //  Copyright © 2016年 Vie. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    @class NSString;
    @interface NSData (AES)
    - (NSData *)AES256EncryptWithKey:(NSData *)key;   //加密
    
    - (NSData *)AES256DecryptWithKey:(NSData *)key;   //解密
    @end

    //  AESEncryptAndDecrypt.m文件

    //
    //  AESEncryptAndDecrypt.m
    //  NSData扩展方法,用于处理aes加解密
    //
    //  Created by Vie on 16/4/7.
    //  Copyright © 2016年 Vie. All rights reserved.
    //
    
    #import "AESEncryptAndDecrypt.h"
    #import <CommonCrypto/CommonCryptor.h>
    //static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    @implementation NSData (AES)
    - (NSData *)AES256EncryptWithKey:(NSData *)key   //加密
    {
        //AES256加密,密钥应该是32位的
        const void * keyPtr2 = [key bytes];
        char (*keyPtr)[32] = keyPtr2;
        //对于块加密算法,输出大小总是等于或小于输入大小加上一个块的大小
        //所以在下边需要再加上一个块的大小
        NSUInteger dataLength = [self length];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        
        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding/*这里就是刚才说到的PKCS7Padding填充了*/| kCCOptionECBMode,
                                              [key bytes], kCCKeySizeAES256,
                                              NULL,/* 初始化向量(可选) */
                                              [self bytes], dataLength,/*输入*/
                                              buffer, bufferSize,/* 输出 */
                                              &numBytesEncrypted);
        
        if (cryptStatus == kCCSuccess) {
            return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        }
        free(buffer);//释放buffer
        return nil;
    }
    
    - (NSData *)AES256DecryptWithKey:(NSData *)key   //解密
    {
        //同理,解密中,密钥也是32位的
        const void * keyPtr2 = [key bytes];
        char (*keyPtr)[32] = keyPtr2;
        //对于块加密算法,输出大小总是等于或小于输入大小加上一个块的大小
        //所以在下边需要再加上一个块的大小
        NSUInteger dataLength = [self length];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesDecrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding/*这里就是刚才说到的PKCS7Padding填充了*/| kCCOptionECBMode,
                                              keyPtr, kCCKeySizeAES256,
                                              NULL,/* 初始化向量(可选) */
                                              [self bytes], dataLength,/* 输入 */
                                              buffer, bufferSize,/* 输出 */
                                              &numBytesDecrypted);
        if (cryptStatus == kCCSuccess) {
            return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
        }
        free(buffer);
        return nil;
    }
    
    
    
    @end

     

    //使用

     //测试加密
        [self encryptBase64Key:@"74DhItW47MitqIBGOf8aosUllBdhlUxB7es64TKCsgU=" originalText:@"监察局时间长"];
    
     //测试解密
       [self decryptBase64Key:@"74DhItW47MitqIBGOf8aosUllBdhlUxB7es64TKCsgU=" cipherText:@"bWZMFt1I2H7wy25D9V3Ll26IdbOs+/NOlzaEqcUZ9L8="];

    //运行结果

    2017-02-16 11:08:03.984 aesDemo[16675:498435] 密文:bWZMFt1I2H7wy25D9V3Ll26IdbOs+/NOlzaEqcUZ9L8=
    2017-02-16 11:08:03.987 aesDemo[16675:498435] 原文:监察局时间长

     

  • 相关阅读:
    Django-model基础
    web框架
    django-MTV
    我与前端之间不得不说的三天两夜之jQuery
    vertical-align和line-height的深入应用
    我与前端之间不得说的三天两夜之css基础
    mysql数据库从删库到跑路之mysql:视图、触发器、事务、存储过程、函数
    我与前端之间不得不说的三天两夜之html基础
    hdu2206 IP地址的计算
    get方式中文乱码解决方法
  • 原文地址:https://www.cnblogs.com/douniwanxia/p/6178054.html
Copyright © 2011-2022 走看看