今天对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的加密相关推荐

  1. java ios 3des_IOS开发入门之iOS 3DES加密 和 java 3DES 解密

    本文将带你了解IOS开发入门之iOS 3DES加密  和 java  3DES 解密,希望本文对大家学ios有所帮助 对称加密算法 3des   在iOS 客户端加密算法 首先进入头文件: #impo ...

  2. php 3des 兼容java,PHP版3DES加解密类,可与java的3DES(DESede)加密方式兼容

    /** * * PHP版3DES加解密类 * * 可与java的3DES(DESede)加密方式兼容 * * @Author: Luo Hui (farmer.luo at gmail.com) * ...

  3. java ios 字符串_Java 与 iOS使用RSA 加密签名

    RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名. 本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境 mac os openssl-1.0. ...

  4. 古典密码学、DES对称加密、3DES对称加密知识总结和实验

    实验三.古典密码学.DES对称加密.3DES对称加密 一.古典密码学:当铺密码.培根密码.摩斯密码.键盘密码.与佛论禅 1.当铺密码: 解密"由人俱一口中"和"大中口由人 ...

  5. IOS之RSA加密解密与后台之间的双向加密详解

    IOS之RSA加密解密与后台之间的双向加密详解 序言 因为项目中需要用到RSA加密,刚开始也是有点乱,这两天也整理的差不多了,希望能帮到大家. 这次先上代码,我想大部分人肯定是着急解决问题,所以不要废 ...

  6. Android 3DES 进行加密解密详细步骤及demo

    Android 3DES 进行加密解密 **我就直接进入主题了哈** **很粗糙的一个页面 希望不要介意** **下面是MainActivity里面的操作** private EditText et_ ...

  7. iOS 3DES加密解密(一行代码搞定)

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

  8. java ios 3des加密,iOS 3DES加密 和 java 3DES 解密

    对称加密算法 3des 在iOS 客户端加密算法 首先进入头文件: #import #import #import -(NSString*)TripleDES:(NSString*)plainText ...

  9. 一行代码实现IOS 3DES加密解密

    3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...

最新文章

  1. String、toString、String.valueOf()三个有啥区别?
  2. 实例构造器和类(引用类型)
  3. mysql 命令行 主从复制_MySQL 的主从复制(高级篇)
  4. 【测试】接口测试介绍
  5. QML笔记-TextEdit的使用
  6. alloc_page分配内存空间--Linux内存管理(十七)
  7. 基于Spring Boot的Logback日志轮转配置
  8. CICD和K8S实战
  9. 电大有计算机教程吗,中央电大 计算机平面设计(上)
  10. eventlet绿化和patch原理
  11. 联想小新电脑摄像头黑屏、检测不到设备、指示灯不亮解决方案
  12. CausalImpact
  13. ios下使用speex进行音频压缩
  14. css3实现图片360度旋转及animation、@keyframes的详解
  15. [音乐欣赏]夜空中最亮的星,张杰,苏阳,新闻晚高峰结束曲
  16. 小米下拉导航栏,36kr 下拉导航栏解决方法
  17. C++核心准则ES.56​:只在需要将一个对象显式移动到另外的作用域时使用std::move​
  18. c51实现老人跌倒,心率异常报警系统
  19. html实现轮播图--小圆圈呈中间大两边小的样式
  20. 找零钱问题——贪心算法

热门文章

  1. 轻量化网络:ShuffleNet v2解析
  2. JSF——JSF 标签
  3. centos 安装 pcre
  4. Jzoj4745 看电影
  5. 靶机18 driftingblues1
  6. XLSX转换为DOCX,Aspose.Cells快速搞定
  7. EAS BOS 单据开发 自定义枚举+下拉列表
  8. 那些名站的网站关键词都是如何到百度首页的
  9. 拉美外贸收款:BBVA银行
  10. 码农饭碗不保——ChatGPT正在取代Coder