最近和别人做接口用到SOCKET TCP/IP方式

其中需要对账号和密码进行3DES加密

对方提供了一个加密比对的软件和JAVA的实现代码

并且给了我们一个长度为32位的密钥

这边需要用PHP来实现!

PHP  3des加密的密钥位24位!关于这个密钥长度的问题纠结了很久

最后被哥蒙对了!

32位长度如何转化为24位呢

我是这样做的

将32位的前16位取出来放到后面 这样32+16 = 48位

然后用

$key = pack('H48',$key)

正好是24位!

也就是16进制转化为字节流

这也是有依据的,这种叫着对称加密

当然加密的方式为cbc模式

cbc模式加密是需要一个向量来增加安全性的

看JAVA代码如下

IvParameterSpec iv = new IvParameterSpec(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 });

这样就看到JAVA中的向量是用字节数组表示的!

但是在PHP中该如何表示呢

当然需要先将此字节数组转化成16进制字符串

在php中就是

00 00 00 00 00 00 00 00(在实际运算中中间的空格要去掉)

如果JAVA的向量为new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }呢

那么在PHP中就是 01 02 03 04 05 06 07 08

然后再用PACK函数转化一下,如下:

$iv = pack('H*','0000000000000000')

好了 向量和密钥确定了,剩下的就是加密了

代码如下:

function en3DESEx($str){

$key = '56781234D56F012BCD5E701A3CDD670956781234D56F012B';//已经改变成48位

$key = pack('H48',$key);

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

// $iv = pack('H*',"0102030405060708"); //like c# new byte[]{1,2,3,4,5,6,7,8}

$iv = pack('H*','0000000000000000');

mcrypt_generic_init($td, $key, $iv);

$encrypted_data = mcrypt_generic($td,$str );

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return bin2hex($encrypted_data); // 转化成16进制字符串

}

$str = '12345678'

echo en3DESEx($str);

结果

/**

* 明文:12345678

* 密文:b2a85cf088D9ff03

*/

而别人给我的软件加密的结果为:B2A85CF088D9FF03

正好将小写转化成大写字母就对了

附带解密函数

function de3DESEx($str){ // 注意 由于加密的时候转化成了16进制,所以解密的字符串也位16进制

$key = '56781234D56F012BCD5E701A3CDD670956781234D56F012B';

$key = pack('H48',$key);

$td = mcrypt_module_open(MCRYPT_3DES, '', MCRYPT_MODE_CBC, '');

// $iv = pack('H*',"0102030405060708"); //like c# new byte[]{1,2,3,4,5,6,7,8}

$iv = pack('H*','0000000000000000');

mcrypt_generic_init($td, $key, $iv);

$encrypted_data = mdecrypt_generic($td, pack('H*',$str)); // 解密用的PHP自带函数

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return $encrypted_data;

} // 然后神奇般的解密成功了!

总结!其实现在的很多语言已经很自能化了,一切的东西别人已经给你封装好了,该怎么用?

呵呵!已经要深刻的了解好业务,不然最后会是多么痛苦的领悟呀!

3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀相关推荐

  1. 3des加密 java php_php 3DES加密如何兼容Java

    Java源码: import java.security.Security; import javax.crypto.Cipher; import javax.crypto.SecretKey; im ...

  2. java mysql 生僻字_mysql/Java服务端对emoji或者生僻字的支持

    最近开发的iOS项目因为需要用户文本的存储,自然就遇到了emoji等表情符号如何被mysql DB支持的问题.困扰了数日,在就要绝望放弃的边缘,终于完成了转换和迁移.在此特别分析和整理,方便更多人. ...

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

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

  4. php 3des 兼容java,java版3des加密程序,可与php兼容

    java版3des加密程序,可与php兼容 时间:2009-03-29 22:35来源:未知 作者:admin 点击:次 代码: import java.io.UnsupportedEncodingE ...

  5. java 3des加密_Java使用3DES加密解密的流程 - 3des加密解密详细解释

    Java使用3DES加密解密的流程 ①传入共同约定的密钥(keyBytes)以及算法(Algorithm),来构建SecretKey密钥对象 SecretKey deskey = new Secret ...

  6. java中3des cbc,js與java通用的3DES(ECB,CBC)+Base64加密編碼,解碼解密

    J S端加密過程: key的處理: 通過創建指定的key,key必須是16位/24位/32位其中一種,但是常用的3DES加密的key為24位,下面使用的就是24位,key的長度可以隨意指定,在轉換ke ...

  7. Java中3DES加密解密示例

    在java中调用sun公司提供的3DES加密解密算法时,需要使用到$JAVA_HOME/jre/lib/目录下如下的4个jar包: jce.jar security/US_export_policy. ...

  8. Java实现3DES加密解密(DESede/ECB/PKCS5Padding使用)

    一.简介 3DES(又叫Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称. 它相当于是对每个数据块应用三次DES加密算 ...

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

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

最新文章

  1. 谷歌用量子计算机造出「时间晶体」,挑战热力学第二定律
  2. python调用自定义函数返回值的类型_生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)...
  3. Centos6 64位系统安装VNCServer
  4. 前端inline元素间隙问题解决办法
  5. 13_线性回归分析、线性模型、损失函数、最小二乘法之梯度下降、回归性能评估、sklearn回归评估API、线性回归正规方程,梯度下降API、梯度下降 和 正规方程对比
  6. java 日期calendar_java时间对象Date,Calendar和LocalDate/LocalDateTime
  7. VS2017 15.8第二个预览版本提升了对CPU Profiling和F#的支持
  8. linux 安装flash tar.gz,ubuntu下安装flash(tar.gz格式)
  9. JQuery使用deferreds串行多个ajax请求
  10. 一个奇怪的发现:html与body,body的margin对html不起作用,html的padding对body却起作用
  11. 移动前端开发和web前端开发的区别
  12. 深度学习是什么,深度学习概念的基本理解?
  13. 电脑无法查看计算机属性,我的电脑属性打不开怎么办
  14. netcore 集成 CAP 使用 rabbitMQ集群
  15. 磨金石教育摄影技能干货分享|那些酷炫的照片是怎么拍出来的?
  16. js中几种对数值取整数和小数部分的方法
  17. 彻底关闭FF新闻资讯
  18. 真核生物 18S rRNA
  19. t型三电平matlab仿真,T型三电平逆变器在不间断电源中的实现
  20. RNA-seq流程学习笔记(10)-使用HTSeq-count软件对reads进行计数

热门文章

  1. 李宗吾和王阳明:居中就是一种心法
  2. Centos6.7安装VNC及VNC客户端用来安装oracle11g
  3. 简支梁挠度计算公式推导_简支梁挠度计算公式
  4. 一笔画游戏路径搜索代码未优化
  5. Alibaba内部的“实战Redis手册” 去其糟粕,取其精华
  6. valueOf()方法详解
  7. 记录一下首次调用wx公众号JSSDK心路
  8. tushare单个股票过去五年的数据整理与预测
  9. 【chineseocr_lite】识别效果
  10. navicat for mysql执行sql语句报错: [Err] 1146 - Table ‘performance_schema.session_status‘doesn‘t exist 解决办法