iOS——3DES的加密
今天对3DES的加密方式做了一次深入的了解,因为近期的项目需要,要对接口进行加密处理,所以经大家一致讨论,采取了DES的加密方式,但是这其中也出现了一些问题,浪费了一些时间,在这里,笔者将自己DES加密的方法分享给大家,希望能帮助大家~~
1.首先进行DSE加密必须要有Base64文件,这里笔者就不过多的去介绍Base64,因为Base64都是一样的,只要将下载好的Base64集成到工程中就好
2.这里定义一个des的文件为MGDes
3.在.h文件中要声明加密和解密的方法:
/**
* 对传入的所有请求参数进行DES3加密
*/
+ (NSString *)encryptParameters:(NSString *)string;
/**
* 对传入的所有请求参数进行DES3解密
*/
+ (NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key;
4.在.m文件实现类方法
(1)首先定义个加密的私钥
#define DES_KEY @"24位(一定要24位)"
(2)导入头文件
#import "GTMBase64.h"
#import <CommonCrypto/CommonCryptor.h>
#import <CommonCrypto/CommonHMAC.h>
#import <CommonCrypto/CommonDigest.h>
(3)定义偏移量
#define gIv @"01234567"
(4)实现+方法
//加密方法
+ (NSString *)encryptParameters:(NSString *)string
{
return [self encryptUseDES:string key:DES_KEY];
}
+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
NSData* data = [plainText dataUsingEncoding:NSUTF8StringEncoding];
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 *) [key UTF8String];
const void *vinitVec = (const void *) [gIv UTF8String];
//kCCOptionPKCS7Padding
ccStatus = CCCrypt(kCCEncrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
vkey,
kCCKeySize3DES,
vinitVec,
vplainText,
plainTextBufferSize,
(void *)bufferPtr,
bufferPtrSize,
&movedBytes);
NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];
NSString *result = [GTMBase64 stringByEncodingData:myData];
return result;
}
//解密方法
+ (NSString *)decryptUseDES:(NSString *)cipherText key:(NSString *)key
{
NSData *encryptData = [GTMBase64 decodeData:[cipherText 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 *) [key UTF8String];
const void *vinitVec = (const void *) [gIv UTF8String];
ccStatus = CCCrypt(kCCDecrypt,
kCCAlgorithm3DES,
kCCOptionPKCS7Padding,
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;
}
5.一定要注意,加密的私钥一定要24位,要不然会和后台和安卓加密的结果不一致,从而导致后台不能解密我们加密过的内容
6.附上一段安卓的代码,安卓和iOS和后台一定要一致。
//加密方法(安卓)
public static String encode(String plainText, String key) throws Exception { DESedeKeySpec spec = new DESedeKeySpec(getKey(key).getBytes()); SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede"); Key deskey = keyfactory.generateSecret(spec); Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding"); IvParameterSpec ips = new IvParameterSpec(iv.getBytes()); cipher.init(Cipher.ENCRYPT_MODE, deskey, ips); byte[] encryptData = cipher.doFinal(plainText.getBytes(encoding)); return new String(Base64.encode(encryptData)); }
转载于:https://www.cnblogs.com/zhangxiansen/p/5772596.html
iOS——3DES的加密相关推荐
- java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密
本文将带你了解IOS开发入门之iOS 3DES加密 和 java 3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des 在iOS 客户端加密算法 首先进入头文件: #impo ...
- php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容
/** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author: Luo Hui (farmer.luo at gmail.com) * ...
- java ios 字符串_Java 与 iOS使用RSA 加密签名
RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...
- 古典密码学、DES对称加密、3DES对称加密知识总结和实验
实验三.古典密码学.DES对称加密.3DES对称加密 一.古典密码学:当铺密码.培根密码.摩斯密码.键盘密码.与佛论禅 1.当铺密码: 解密"由人俱一口中"和"大中口由人 ...
- IOS之RSA加密解密与后台之间的双向加密详解
IOS之RSA加密解密与后台之间的双向加密详解 序言 因为项目中需要用到RSA加密,刚开始也是有点乱,这两天也整理的差不多了,希望能帮到大家. 这次先上代码,我想大部分人肯定是着急解决问题,所以不要废 ...
- Android 3DES 进行加密解密详细步骤及demo
Android 3DES 进行加密解密 **我就直接进入主题了哈** **很粗糙的一个页面 希望不要介意** **下面是MainActivity里面的操作** private EditText et_ ...
- iOS 3DES加密解密(一行代码搞定)
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- java ios 3des加密,iOS 3DES加密 和 java 3DES 解密
对称加密算法 3des 在iOS 客户端加密算法 首先进入头文件: #import #import #import -(NSString*)TripleDES:(NSString*)plainText ...
- 一行代码实现IOS 3DES加密解密
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
最新文章
- String、toString、String.valueOf()三个有啥区别?
- 实例构造器和类(引用类型)
- mysql 命令行 主从复制_MySQL 的主从复制(高级篇)
- 【测试】接口测试介绍
- QML笔记-TextEdit的使用
- alloc_page分配内存空间--Linux内存管理(十七)
- 基于Spring Boot的Logback日志轮转配置
- CICD和K8S实战
- 电大有计算机教程吗,中央电大 计算机平面设计(上)
- eventlet绿化和patch原理
- 联想小新电脑摄像头黑屏、检测不到设备、指示灯不亮解决方案
- CausalImpact
- ios下使用speex进行音频压缩
- css3实现图片360度旋转及animation、@keyframes的详解
- [音乐欣赏]夜空中最亮的星,张杰,苏阳,新闻晚高峰结束曲
- 小米下拉导航栏,36kr 下拉导航栏解决方法
- C++核心准则ES.56​:只在需要将一个对象显式移动到另外的作用域时使用std::move​
- c51实现老人跌倒,心率异常报警系统
- html实现轮播图--小圆圈呈中间大两边小的样式
- 找零钱问题——贪心算法