iOS 3DES加密解密(一行代码搞定)
来源:互联网 发布:php代替session 编辑:程序博客网 时间:2024/05/16 01:45
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密。数据加密标准(DES)是美国的一种由来已久的加密标准,它使用对称密钥加密法,并于1981年被ANSI组织规范为ANSI X.3.92。DES使用56位密钥和密码块的方法,而在密码块的方法中,文本被分成64位大小的文本块然后再进行加密。比起最初的DES,3DES更为安全。
一行代码实现3DES加密解密需要用到写的 JKEncrypt https://github.com/jukai9316/JKEncrypt。
下面先解析以下3DES的实现,然后再说,如何使用JKEncrypt。
注意点:填充方式不一样
在与后台交互的过程中,由于java 里面用的是PKCS5Padding,而iOS只有kCCOptionPKCS7Padding,所以用kCCOptionPKCS7Padding | kCCOptionECBMode 相当于PKCS5Padding。
以下是3DES 256 在iOS开发中的实现:
#import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h>#import <Security/Security.h>#import "GTMBase64.h"
//密匙 key#define gkey @"Kyle_Chu"//偏移量#define gIv @"jukai"
//字符串加密-(NSString *)doEncryptStr:(NSString *)originalStr{ //把string 转NSData NSData* data = [originalStr dataUsingEncoding:NSUTF8StringEncoding]; //length size_t plainTextBufferSize = [data length]; const void *vplainText = (const void *)[data bytes]; CCCryptorStatus ccStatus; uint8_t *bufferPtr = NULL; size_t bufferPtrSize = 0; size_t movedBytes = 0; bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1); bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); memset((void *)bufferPtr, 0x0, bufferPtrSize); const void *vkey = (const void *) [gkey UTF8String]; //偏移量 const void *vinitVec = (const void *) [gIv UTF8String]; //配置CCCrypt ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES, //3DES kCCOptionECBMode|kCCOptionPKCS7Padding, //设置模式 vkey, //key kCCKeySize3DES, vinitVec, //偏移量,这里不用,设置为nil;不用的话,必须为nil,不可以为@“” vplainText, plainTextBufferSize, (void *)bufferPtr, bufferPtrSize, &movedBytes); NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes]; NSString *result = [GTMBase64 stringByEncodingData:myData]; return result;}
//字符串解密-(NSString*)doDecEncryptStr:(NSString *)encryptStr{ NSData *encryptData = [GTMBase64 decodeData:[encryptStr dataUsingEncoding:NSUTF8StringEncoding]]; size_t plainTextBufferSize = [encryptData length]; const void *vplainText = [encryptData bytes]; CCCryptorStatus ccStatus; uint8_t *bufferPtr = NULL; size_t bufferPtrSize = 0; size_t movedBytes = 0; bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1); bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t)); memset((void *)bufferPtr, 0x0, bufferPtrSize); const void *vkey = (const void *) [gkey UTF8String]; const void *vinitVec = (const void *) [gIv UTF8String]; ccStatus = CCCrypt(kCCDecrypt, kCCAlgorithm3DES, kCCOptionPKCS7Padding|kCCOptionECBMode, vkey, kCCKeySize3DES, vinitVec, vplainText, plainTextBufferSize, (void *)bufferPtr, bufferPtrSize, &movedBytes); NSString *result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding]; return result;}
十六进制的实现省略了,可以阅读JKEncrypt.m
JKEncrypt的使用:
//1、设置您需要的密匙、偏移量//密匙 key#define gkey @"Kyle_Chu"//偏移量#define gIv @"jukai"
// @"kyle_jukai" 是测试字符串,换成您需要加密的内容即可JKEncrypt * en = [[JKEncrypt alloc]init];//加密NSString * encryptStr = [en doEncryptStr: @"kyle_jukai"];NSString * encryptHex = [en doEncryptHex: @"kyle_jukai"];NSLog(@"字符串加密:%@",encryptStr);NSLog(@"十六进制加密:%@",encryptHex);//解密NSString *decEncryptStr = [en doDecEncryptStr:encryptStr];NSString *decEncryptHex = [en doEncryptHex:encryptHex];NSLog(@"字符串解密:%@",decEncryptStr);NSLog(@"字符串解密:%@",decEncryptHex);
- iOS 3DES加密解密(一行代码搞定)
- iOS 3DES加密解密(一行代码搞定)
- 一行代码实现IOS 3DES加密解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密
- iOS,一行代码进行RSA、DES 、AES加密、解密及MD5加密
- sunjce iOS des 3des解密加密
- iOS,一行代码进行RSA、DES 、AES、MD5加密、解密(转)
- 【代码笔记】iOS-3DES+Base64加密解密
- DES加密解密代码
- ios学习--IOS 3DES加密解密
- iOS-OC-3DES加密和解密
- DES/3DES加密,解密
- iOS 3DES加密 和 java 3DES 解密
- 3DES 加密解密
- 快速排序(java)
- Swift 设置 tabbar 字体颜色和字体大小
- 一张图让你看明白Nettty EventLoop是个什么东东
- 原生js多级菜单启示录
- C语言作业-4-2念整数
- iOS 3DES加密解密(一行代码搞定)
- 在SSM下使用POI实现Excel表的导入/导出
- caffe2 first sight
- Kotlin简介
- Objective-C instancetype关键字
- win32学习11.资源
- linux 安装 eclipse
- 拷贝构造函数和赋值构造函数声明为私有的作用
- 计算机组成原理(第六章:计算机的运算方法)