当前位置: 首页 > 后端技术 > PHP

PHPDES-ECB加密对接Java解密

时间:2023-03-29 22:03:32 PHP

最近公司有个业务需要对接第三方接口,但是需要对参数进行加密,对方只提供了一个javademo。在网上到处找,也没找到直接的使用方法。后来跟公司的Android工程师聊了聊。对接后,这里记录一下大概的过程。首先说明对方需要的接口请求方式。格式为:http://ip:port/interface/method?data=abstract@@16进制字符串说明:1、请求参数需要组合成a=1&b=2&c=3格式的参数字符串;2、生成摘要的方法是md5('a=1&b=2&c=3');3、十六进制字符串的生成方法是对参数字符串进行**对称加密(DES-ECB)**,然后转换成十六进制字符串(bin2hex函数);对方提供的demo(java版)如下:publicclassDesUtils{/**Defaultkey*/privatestaticStringstrDefaultKey="seeyonssokey";/**加密工具*/privateCipherencryptCipher;/**解密工具*/privateCipherdecryptCipher;/***加密字符串*@paramstrIn待加密字符串*@return加密字符串*@throwsException*/publicStringencrypt(StringstrIn)throwsException{returnbyteArr2HexStr(encryptCipher.doFinal(strIn.getBytes()));}/***解密字符串*@paramstrIn待解密字符串*@return解密字符串*@throwsException*/publicStringdecrypt(StringstrIn)throwsException{returnnewString(decryptCipher.doFinal(hexStr2ByteArr(strIn)));}/***将字节数组转换为表示十六进制值的字符串,如:byte[]{8,18}转换为:0813,而publicstatic*byte[]hexStr2ByteArr(StringstrIn)可逆转换过程*@paramarrB待转换的字节数组*@return转换后的字符串*@throwsException该方法不处理任何异常,所有异常都抛出*/publicstaticStringbyteArr2HexStr(byte[]arrB)throwsException{intiLen=arrB.length;//每个字节只能用两个字符表示,所以字符串的长度是数组长度的两倍StringBuffersb=newStringBuffer(iLen*2);for(inti=0;i李国庆*/publicstaticbyte[]hexStr2ByteArr(StringstrIn)throwsException{byte[]arrB=strIn.getBytes();intiLen=arrB.length;//两个字符代表一个字节,所以字节数组的长度就是字符串的长度除以2byte[]arrOut=newbyte[iLen/2];for(inti=0;i