1.AES加解密

AES加解密

//

//  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

//  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

//处理base64编码的密钥加密,原文转换为base64字符串;返回aes加密后的base64编码字符串

-(NSString *)encryptBase64Key:(NSString *)key originalText:(NSString *)text{

//base64字符串utf8格式转nsdata

NSData *dataUtf8Key=[[NSData alloc] initWithBase64EncodedString:[NSString stringWithUTF8String:[key UTF8String]] options:NSDataBase64DecodingIgnoreUnknownCharacters];

//原文转data

NSData *textData = [text dataUsingEncoding:NSUTF8StringEncoding];

//aes加密

NSData *cipherData = [textData AES256EncryptWithKey:dataUtf8Key];

//密文转为base64字符串

NSString *cipherBase64Str=[cipherData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

NSLog(@"密文:%@",cipherBase64Str);

return cipherBase64Str;

}

//处理base64编码的密钥,密文解密;返回原文

-(NSString *)decryptBase64Key:(NSString *)key cipherText:(NSString *)text{

//密钥base64处理

//base64字符串utf8格式转nsdata

NSData *dataUtf8Key=[[NSData alloc] initWithBase64EncodedString:[NSString stringWithUTF8String:[key UTF8String]] options:NSDataBase64DecodingIgnoreUnknownCharacters];

//密文解base64处理

NSData *dataUtf8Data=[[NSData alloc] initWithBase64EncodedString:[NSString stringWithUTF8String:[text UTF8String]] options:NSDataBase64DecodingIgnoreUnknownCharacters];

//解密原文

NSData *decryptData=[dataUtf8Data AES256DecryptWithKey:dataUtf8Key];

NSString *originalText= [[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding];

NSLog(@"原文:%@",originalText);

return originalText;

}

 //测试加密

[self encryptBase64Key:@"74DhItW47MitqIBGOf8aosUllBdhlUxB7es64TKCsgU=" originalText:@"监察局时间长"];

 //测试解密

[self decryptBase64Key:@"74DhItW47MitqIBGOf8aosUllBdhlUxB7es64TKCsgU=" cipherText:@"bWZMFt1I2H7wy25D9V3Ll26IdbOs+/NOlzaEqcUZ9L8="];

iOS,信息加解密的更多相关文章

  1. iOS URL加解密

    URL加解密 背景介绍 iOS 下URL加解密,项目使用AFNetworking 虽然是使用HTTPS,但是从安全方面考虑,在很多情况下还是需要对url的参数进行加密的. 接口如 https://19 ...

  2. 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创

    前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ps:日常开发中,我们要有一定的安全意识 ...

  3. iOS RSA加解密签名和验证

    转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...

  4. iOS RC4加解密算法

    -(NSString *)encrypt:(NSString *)string withKey:(NSString *)key{ self.sBox = [[self frameSBox:key] m ...

  5. java与IOS之间的RSA加解密

    很简单的一个需求,ipad端给密码RSA加密,传到java后台,解密.RSA加密算法是基于一个密钥对的,分为公钥和私钥,一般情况公钥加密,私钥解密,但也可私钥加密,公钥解密.还可以验签,就是先用私钥对 ...

  6. DES跨(C# Android IOS)三个平台通用的加解密方法

          #region   跨平台加解密(c# 安卓 IOS)       //  public static string sKey = "12345678";       ...

  7. 【iOS】FMDB/SQLCipher数据库加解密,迁移

    2016-04-19更新:本文代码可能有些问题,请移步 http://zhengbomo.github.io/2016-04-18/sqlcipher-start/ 查看 sqlite应用几乎在所有的 ...

  8. .net 安卓IOS跨平台des加解密双向的(可以互相加解密)

    #region 跨平台加解密(c# 安卓 IOS) // public static string sKey = "12345678"; // /// // /// 解密 // / ...

  9. ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密

    JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...

随机推荐

  1. java中定时器的四种方法

    package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...

  2. 【Spring】获取资源文件+从File+从InputStream对象获取正文数据

    1.获取资源文件或者获取文本文件等,可以通过Spring的Resource的方式获取 2.仅有File对象即可获取正文数据 3.仅有InputStream即可获取正文数据 package com.sx ...

  3. 意法STM32F1系列MCU单片机解密芯片破解复制

    意法STM32F1系列MCU单片机解密芯片破解复制 STM32F1系列MCU芯片解密: STM32F100解密 | STM32F101解密 | STM32F102解密 | STM32F103解密 |  ...

  4. XCode6 生成prefix.pch文件

    XCode6里, 新建工程默认是没有pch文件的,苹果取消pch文件这一点肯定有它的道理,刚开始很多人可能不适应,如果我们想使用pch文件,需要手动添加,添加步骤如下:(依旧直接上图)

  5. 简单CSS3动画制作

    本贴已重新编辑至http://www.cnblogs.com/fastmover/p/4977358.html 最近需要用到了一些CSS3动画,基本用Animate.css(https://githu ...

  6. 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...

  7. 【JAVA】JDK -Calendar 遇到的 一个坑

    Calendar是JDK 1.1增加的类 最近使用了下Calendar发现几个很让人抓狂的问题 源码: public final static int SUNDAY = 1; public final ...

  8. eclipse安装maven

    maven3 安装: 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目, 首先去官网下载 Maven: 下载完成之后将其解压,解压后的文件夹重命 ...

  9. PHP与apache环境配置

    最近想了解一些网页后台的东西,在看Luke Welling,laura Thomson的<php与mysql web开发>,书中环境配置的部分很庞杂,网上的各种教程也很乱,搞了一下午终于成 ...

  10. WPF整理-XAML访问静态属性

    "XAML provides an easy way to set values of properties—type converters and the extended propert ...