iOS,信息加解密
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,信息加解密的更多相关文章
- iOS URL加解密
URL加解密 背景介绍 iOS 下URL加解密,项目使用AFNetworking 虽然是使用HTTPS,但是从安全方面考虑,在很多情况下还是需要对url的参数进行加密的. 接口如 https://19 ...
- 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创
前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ps:日常开发中,我们要有一定的安全意识 ...
- iOS RSA加解密签名和验证
转自:http://www.jianshu.com/p/81b0b54436b8 Pre:在公司负责了一个项目,需要用到iOS RSA验证签名的功能.后台给我的仅仅是一个公钥的字符串.经过起初的一段时 ...
- iOS RC4加解密算法
-(NSString *)encrypt:(NSString *)string withKey:(NSString *)key{ self.sBox = [[self frameSBox:key] m ...
- java与IOS之间的RSA加解密
很简单的一个需求,ipad端给密码RSA加密,传到java后台,解密.RSA加密算法是基于一个密钥对的,分为公钥和私钥,一般情况公钥加密,私钥解密,但也可私钥加密,公钥解密.还可以验签,就是先用私钥对 ...
- DES跨(C# Android IOS)三个平台通用的加解密方法
#region 跨平台加解密(c# 安卓 IOS) // public static string sKey = "12345678"; ...
- 【iOS】FMDB/SQLCipher数据库加解密,迁移
2016-04-19更新:本文代码可能有些问题,请移步 http://zhengbomo.github.io/2016-04-18/sqlcipher-start/ 查看 sqlite应用几乎在所有的 ...
- .net 安卓IOS跨平台des加解密双向的(可以互相加解密)
#region 跨平台加解密(c# 安卓 IOS) // public static string sKey = "12345678"; // /// // /// 解密 // / ...
- ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入、和使用、.js文件传输加解密
JSPatch ios开发不能不知的动态修复bug补丁第三方库JSPatch 使用学习:JSPatch导入.和使用..js文件传输加解密 ios开发面临审核周期长,修复bug延迟等让人无奈的问题,所以 ...
随机推荐
- ajax完整格式
$.ajax({ url: encodeURI( "@Url.Action("NavList", "Home")" ...
- IE
.demo { padding:10px; padding:9px\9; /* all ie */ padding:8px\0; /* ie8-9 目前应用于IE8的单独hack,情况比较少 */ * ...
- 198个经典C#WinForm实例源码(超赞) 里面的例子 .sln 目录
\-窗体技巧\QQ窗体\QQFrm.sln; \-窗体技巧\仿XP系统的任务栏菜单\仿XP系统的任务栏菜单.sln; \-窗体技巧\向窗体中拖放图片并显示\向窗体中拖放图片并显示.sln; \-窗体技 ...
- scala tail recursive优化,复用函数栈
在scala中如果一个函数在最后一步调用自己(必须完全调用自己,不能加其他额外运算子),那么在scala中会复用函数栈,这样递归调用就转化成了线性的调用,效率大大的提高.If a function c ...
- 谓词 (NSPredicate)使用详情
谓词 更加详细:http://blog.csdn.net/ztp800201/article/details/8116081 //判断是否满足条件 第一种 判断一个数组(array)中满足条件的 NS ...
- 自己写的AutoMapper
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...
- 【BZOJ】3505: [Cqoi2014]数三角形
题意 \(n * m(1 \le n, m \le 1000)\)的网格,求顶点在格点上三角形的个数. 分析 假设\(n \le m\) \(ans = \binom{(n+1) * (m+1)}{3 ...
- Jquery_类选择器笔记
$("[id^=percent]").size() ^=:表示以什么开头 $=:表示以什么结尾 ~=:表示包含什么 id:表示按id选择
- java分享第七天-03(递归打印文件目录的树状结构)
public static void main(String[] args) { File file= new File("e:/list"); printFile(file, 0 ...
- 字符串转数字_atoi_stringstream
一.#include <cstdlib> 字符串转换到整型数,函数原型:int atoi(const char *nptr) 注意事项:有符号整型,能转换的最大字符串是:"214 ...