最近在做支付类APP,遇到了很多以前没遇到过的东西。接下来我会用这系列文章来记录我所遇到的问题。

首先就是在组8583报文时用到的3DES加密。8583报文是以字节为单位的所以可能3DES加密会有稍许不同。

我自己搞这个问题也搞了两天,最后还是拜托一个高手给搞定的。

我在网上也搜了很多资料最后发现有一帖子很接近答案。链接如下:

http://www.cocoachina.com/bbs/read.php?tid=245410

请教高手所做的就是把哈希那句给去掉然后稍微做下处理,有兴趣的同学可以自己做下对比。

经本人无数次验证没问题,首先给出一个加密的例子

/*

密文:EC643168D551763F1CC9762AD7ACF556

密钥:49D5E0D326518A10F7E5611A5B0D8054

明文:CD8DF81926A629C5715830F89981F278

*/

没什么说的直接上代码

+ (NSString *)threeDESEncrypt:(NSString *)plainText withKey:(NSString *)key{

//16进制字符串转为 data数据

NSData  *data = [NSStringhexToBytes:key];

//组装解密key取前16个字节然后再次取前8个字节组成key

uint8_t *git = (uint8_t *)[databytes];

uint8_t keyByte[24];

for (int i=0; i<16; i++) {

keyByte[i] = git[i];

}

for (int i=0; i<8; i++) {

keyByte[16+i] = git[i];

}

NSData *EncryptData = [NSStringhexToBytes:plainText];

size_t plainTextBufferSize = [EncryptDatalength];

constvoid *vplainText = [EncryptDatabytes];

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);

constvoid *vkey = (constvoid *) keyByte;

ccStatus =CCCrypt(kCCEncrypt,

kCCAlgorithm3DES,

kCCOptionECBMode,

vkey,

kCCKeySize3DES,

nil,

vplainText,

plainTextBufferSize,

(void *)bufferPtr,

bufferPtrSize,

&movedBytes);

NSData *dataresult = [NSDatadataWithBytes:(constvoid *)bufferPtr

length:(NSUInteger)movedBytes];

NSString *result = [NSStringhexStringFromData:dataresult];

return [resultuppercaseString];

}

其中用到的两个方法如下

/**

*  十六 进制字符串转换为 data

*  24211D3498FF62AF  -->  <24211D34 98FF62AF>

*

*  @param str 要转换的字符串

*

*  @return 转换后的数据

*/

+(NSData*)hexToBytes:(NSString *)str{

NSMutableData* data = [NSMutableDatadata];

int idx;

for (idx =0; idx+2 <= str.length; idx+=2) {

NSRange range =NSMakeRange(idx,2);

NSString* hexStr = [strsubstringWithRange:range];

NSScanner* scanner = [NSScannerscannerWithString:hexStr];

unsignedint intValue;

[scannerscanHexInt:&intValue];

[dataappendBytes:&intValuelength:1];

}

return data;

}

/**

*  data 转换为十六进制字符串

*  <24211D34 98FF62AF>  -->  24211D3498FF62AF

*

*  @param data 要转换的data

*

*  @return 转换后的字符串

*/

+ (NSString *)hexStringFromData:(NSData *)data{

NSMutableString *str = [NSMutableStringstring];

Byte *byte = (Byte *)[databytes];

for (int i =0; i<[datalength]; i++) {

// byte+i为指针

[strappendString:[selfstringFromByte:*(byte+i)]];

}

return str;

}

+ (NSString *)stringFromByte:(Byte)byteVal{

NSMutableString *str = [NSMutableString string];

//取高四位

Byte byte1 = byteVal>>4;

//取低四位

Byte byte2 = byteVal & 0xf;

//拼接16进制字符串

[str appendFormat:@"%x",byte1];

[str appendFormat:@"%x",byte2];

return str;

}

以上就是全部代码,这里只给出了加密的代码,其实解密的代码也是一样,只是代码中的 kCCEncrypt改为

kCCDecrypt之后就由加密变成了解密。

这就是iOS中的3DES加密,只是针对于8583报文的3DES加密,至于其他地方遇到的3DES加密也许会略有不同,但总体来说流程就是这样。

如有问题欢迎来跟我一起讨论 ———— LC

iOS POS之3DES加密相关推荐

  1. iOS 加密算法之MD5加密使用

    2020.06.04编辑 前言 对于加密算法这个概念我的确不太清楚,虽然我知道加密算法存在的意义,但是这并不妨碍我不知道加密算法具体都有哪些.所以今天这篇文章就是了大家一起学习开发中哪些加密算法. 在 ...

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

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

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

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

  4. IOS加密技术之——3DES加密解密技术(记录)

    IOS常用加密技术有三种:3DES.SHA1和MD5.其中,对称加密技术有:3DES和SHA1:非对称加密技术有:MD5: 对称加密:加密解密用的是同一个密钥. 非对称加密:生成公有密钥和私有密钥.一 ...

  5. 简进祥==iOS 3DES加密解密

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

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

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

  7. java 3des 32位密钥_3des,java_java 中32位秘钥长度的 3des加密方法?,3des,java - phpStudy...

    java 中32位秘钥长度的 3des加密方法? java 中 3des加密 默认是24位秘钥的 现在需求是 32位秘钥加密 尝试很多种方法 解决 结果都不正确 // 密钥 private final ...

  8. JAVA的3DES加密代码转成oc_iOS之DES加密

    项目是使用3DES算法,ECB分组加密模式. 我们后端使用的加密过程:对明文进行十六进制编码,在使用3DES加密.iOS端解密需要把密文进行二进制解码,再使用3DES解密.后来查阅资料看到,后端也可以 ...

  9. 3DES加密认识与使用

    公司的项目需要用到3DES加密,于是自己学习了一下,下面分享一下学习内容: 3DES是三重数据加密算法块密码的通称,听到名字就知道与DES加密有关,简单的理解为用DES加密三次,通过增加DES的密钥长 ...

最新文章

  1. 数据库事务原理及并发、死锁
  2. 数据集与JSON对象互相转换
  3. Jsoup实现Iteye自动登录
  4. java.net.URISyntaxException的解决办法
  5. stk 坐标系_STK中文用户手册.pdf
  6. C# 线程间不能调用剪切板的问题
  7. impdp导入dmp文件ORA-39088: 文件名不能包含路径说明ORA-39001: 参数值无效ORA-39000: 转储文件说明错误
  8. java系统项目分为哪五大层次?控制层_业务_一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转...
  9. MySQL基础,DDL和DML(新人入门向)
  10. PyTorch 多目标跟踪
  11. 在线字符串哈希/散列加密工具
  12. 程序员让开,硅谷将是物理学家的天下,薪水高得离谱
  13. 推荐一款UI非常Good的 Redis 客户端工具
  14. 好多游戏,大部分都有修改器,大家赶紧下!
  15. 2020《互联网周刊》年度评选结果揭晓, Smartbi获三项行业大奖
  16. 案例:模拟京东快递单号查询 字体放大显示
  17. PKU四日游(信息科学夏令营)
  18. android修改默认的返回图标
  19. 某版本瑞数解决方案-爬虫
  20. script ‘D:\pycharm\Student‘ not found

热门文章

  1. 概率论复习笔记——条件概率、全概率、贝叶斯公式及其应用
  2. 靶机10 DC-9(过程超详细)
  3. MyISAM和InnoDB的区别
  4. Java之切割时间段
  5. 国外主流搜索引擎提交入口
  6. visual studio 2019安装教程(C++版)
  7. gitBlit的使用
  8. 高斯消元法(二):高斯消元法原理
  9. 缩放图像、切割图像、图像类型转换、彩色转黑白、文字水印、图片水印
  10. Revit二次开发之族库管理系统