与第三方接口对接des加密、解密,第三方提供java的des加密解密demo,特记录PHP与java加密解密。

import javax.crypto.*;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Date;
import java.util.Locale;
import sun.misc.BASE64Decoder;
public class DesUtil {/*** DES解密** @param secretData 密码字符串* @param secretKey  解密密钥* @return 原始字符串* @throws Exception*/private static final String DES_ALGORITHM = "DES";public static String decryption(String secretData, String secretKey) throws Exception {if (secretData == null)return null;//表示为ios加密if(secretData.startsWith("ios:")){secretData = secretData.split(":")[1];return decrypt(secretData,secretKey);}else{Cipher cipher = null;try {cipher = Cipher.getInstance("DES/ECB/NoPadding");cipher.init(Cipher.DECRYPT_MODE, generateKey(secretKey));} catch (NoSuchAlgorithmException e) {e.printStackTrace();throw new Exception("NoSuchAlgorithmException", e);} catch (NoSuchPaddingException e) {e.printStackTrace();throw new Exception("NoSuchPaddingException", e);} catch (Exception e) {e.printStackTrace();}try {byte[] buf = cipher.doFinal(hexStr2Bytes(secretData));int num = 0;for (byte b: buf) {String name = b+"";if (name.length() == 1) {num++;}}byte[] bytes = new byte[buf.length-num];for (int i =0; i < buf.length; i++) {String name = buf[i]+"";if (name.length() != 1) {bytes[i] = buf[i];}}return new String(bytes, "utf-8");} catch (Exception e) {e.printStackTrace();throw new Exception("IllegalBlockSizeException", e);}}}public static byte[] hexStr2Bytes(String src) {src = src.trim().replace(" ", "").toUpperCase(Locale.US);int m = 0, n = 0;int iLen = src.length() / 2; //计算长度byte[] ret = new byte[iLen]; //分配存储空间for (int i = 0; i < iLen; i++) {m = i * 2 + 1;n = m + 1;ret[i] = (byte) (Integer.decode("0X" + src.substring(i * 2, m) + src.substring(m, n)) & 0xFF);}return ret;}/*** 获得秘密密钥** @param secretKey* @return* @throws NoSuchAlgorithmException*/private static SecretKey generateKey(String secretKey)throws Exception {SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);DESKeySpec keySpec = new DESKeySpec(secretKey.getBytes());keyFactory.generateSecret(keySpec);return keyFactory.generateSecret(keySpec);}public static String decrypt(String data, String key) throws IOException,Exception {BASE64Decoder decoder = new BASE64Decoder();byte[] buf = decoder.decodeBuffer(data);byte[] bt = decrypt(buf,key.getBytes());return new String(bt);}/*** Description 根据键值进行解密* @param data* @param key  加密键byte数组* @return* @throws Exception*/private static byte[] decrypt(byte[] data, byte[] key) throws Exception {// 生成一个可信任的随机数源SecureRandom sr = new SecureRandom();// 从原始密钥数据创建DESKeySpec对象DESKeySpec dks = new DESKeySpec(key);// 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES_ALGORITHM);SecretKey securekey = keyFactory.generateSecret(dks);// Cipher对象实际完成解密操作Cipher cipher = Cipher.getInstance(DES_ALGORITHM);// 用密钥初始化Cipher对象cipher.init(Cipher.DECRYPT_MODE, securekey, sr);return cipher.doFinal(data);}/*** DES算法,加密** @param data 待加密字符串* @param key  加密私钥,长度不能够小于8位* @return 加密后的字节数组,一般结合Base64编码使用*/public static String encode(String data,String key) throws Exception{SecretKeySpec key0 = new SecretKeySpec(getKey(key), "DES");Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");cipher.init(Cipher.ENCRYPT_MODE, key0);byte[] encryptedData = cipher.doFinal(padding(data));return bytesToHexString(encryptedData);}public static byte[] getKey(String keyRule) {Key key = null;byte[] keyByte = keyRule.getBytes();// 创建一个空的八位数组,默认情况下为0byte[] byteTemp = new byte[8];for (int i = 0; i < byteTemp.length && i < keyByte.length; i++) {byteTemp[i] = keyByte[i];}key = new SecretKeySpec(byteTemp, "DES");return key.getEncoded();}public static byte[] padding(String arg_text){byte[] encrypt = arg_text.getBytes();if(encrypt.length % 8 != 0){ //not a multiple of 8byte[] padded = new byte[encrypt.length + 8 - (encrypt.length % 8)];System.arraycopy(encrypt, 0, padded, 0, encrypt.length);encrypt = padded;}return encrypt;}/*** 把字节数组转换成16进制字符串* @param bArray* @return*/public static final String bytesToHexString(byte[] bArray) {if(bArray == null ){return "";}StringBuffer sb = new StringBuffer(bArray.length);String sTemp;for (int i = 0; i < bArray.length; i++) {sTemp = Integer.toHexString(0xFF & bArray[i]);if (sTemp.length() < 2)sb.append(0);sb.append(sTemp.toUpperCase());}return sb.toString();}public static void main(String[] args) throws Exception {String key="qwertyuiop123456";String data = "1638265429000qazxswedc951753";String signatures = encode(data, key);System.out.println("java加密结果:"+signatures);String decryptData = decryption(signatures , key);System.out.println("java解密结果:"+decryptData );String phpDes = "56f9e0db4850341b1c734b93b5138eea8f7a9432d8c5680cc5ac9a286aceff04";String decryptDataForPhp = decryption(phpDes,key);System.out.println("解密php的des加密结果:"+decryptDataForPhp );}
}

执行得到的结果

java加密结果:56F9E0DB4850341B1C734B93B5138EEA8F7A9432D8C5680CAE949C8C1F69B8A0
java解密结果:1638265429000qazxswedc951753
解密php的des加密结果:1638265429000qazxswedc951753

PHP加密Des的加密解密

$str = "1638265429000qazxswedc951753";
$key = "qwertyuiop123456";
//加密
$data = openssl_encrypt(str, 'DES-ECB', $key, OPENSSL_RAW_DATA, '');
$encryptString = bin2hex($data);
var_dump("php加密结果:".encryptString );$decryptString = openssl_decrypt(hex2bin(encryptString), 'DES-ECB', $key, OPENSSL_RAW_DATA, '');
var_dump("php解密结果:".decryptString );$javaDes = "56F9E0DB4850341B1C734B93B5138EEA8F7A9432D8C5680CAE949C8C1F69B8A0";
$ret = openssl_decrypt(hex2bin($javaDes), 'DES-ECB', $key, OPENSSL_NO_PADDING, '');
var_dump("解密java的des结果:".$ret);

执行得到的结果

php加密结果:string(64) "56f9e0db4850341b1c734b93b5138eea8f7a9432d8c5680cc5ac9a286aceff04"
php解密结果:string(28) "1638265429000qazxswedc951753"
解密java的des结果:string(32) "1638265429000qazxswedc951753"

php与java的des加密解密相关推荐

  1. java 实现 DES加密 解密算法

    DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个字节共64位,是DES算法的工作密钥:Data也为8个字节64位,是要被加密或被解密的数据:Mode为DES的工作方式,有两种: ...

  2. java des 加密工具的使用,Java中DES加密解密工具类的实现实例

    这篇文章主要介绍了Java实现的DES加密解密工具类,结合具体实例形式分析了Java实现的DES加密解密工具类定义与使用方法,需要的朋友可以参考下 本文实例讲述了Java实现的DES加密解密工具类.分 ...

  3. Java实现DES加密解密

    DES(Data Encryption Standard)是一种对称加密算法,所谓对称加密就是加密和解密都是使用同一个密钥. 加密原理: DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位, ...

  4. Android平台和java平台 DES加密解密互通程序及其不能互通的原因

    为什么80%的码农都做不了架构师?>>>    网上的demo一搜一大堆,但是,基本上都是一知半解(包括我).为什么呢?我在尝试分别在两个平台加密的时候,竟然发现Android DE ...

  5. java ios des加密解密_IOS、java支持DES加密

    转载请注明博客地址:http://blog.csdn.net/mengxiangyue/article/details/40015727 近期在考虑数据加密方面的需求,所以对数据加密简单的看了一下,当 ...

  6. Java 实现DES加密解密

    import java.security.*; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.cryp ...

  7. 在Java中DES加密/解密的实现[工具类]

    使用前需导入Crypto包: <dependency><groupId>org.springframework.security</groupId><arti ...

  8. Java实现DES加密解密(对称式)

    原文:https://blog.csdn.net/gs12software/article/details/83899389 对称式加密:就是加密和解密都是使用同一个密钥,如DES加密 非对称式加密: ...

  9. java des加密类_java的DES加密解密辅助类

    java的DES加密解密辅助类 package temptest; import java.io.IOException; import java.io.UnsupportedEncodingExce ...

最新文章

  1. HashMap和HashSet的区别
  2. Visual Studio工具栏中无法选择调试设备
  3. C++ QT中namespace使用?
  4. No module named MySQLdb (django)
  5. tensoflow_yolov3 计算平均识别个数(平均识别数)
  6. java 封装优化工具_利用Java注解的简单封装的一次优化
  7. spring 各个jar包的功能
  8. FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解(转)
  9. 终极JPA查询和技巧列表–第1部分
  10. Spring(2)----IoC基础
  11. 大文件上传服务器、支持超大文件HTTP断点续传实践总结
  12. html标签acronym没用,acronym_废弃 | Obsolete_HTML_参考手册_非常教程
  13. springboot + mybatis + 多数据源
  14. Mac下开机启动rc.common不生效的问题
  15. 电子设备常见的音视频接口
  16. 许凯拍《招摇》冻到嘴唇发紫 夸赞导演更敬业
  17. 采用RP2040 MCU的树莓派Pico迷你开发板介绍
  18. linux qt 背景图片,《转》qt中添加背景图片(stylesheet)
  19. 前端开发需要会什么?先掌握这三大核心关键技术
  20. 用AD20绘制NSOP的芯片封装-PCB绘制-适用于其他双排类型的IC-详细过程-学习记录

热门文章

  1. apk 反编译工具和方法
  2. 惠普服务器之开启虚拟化功能吗,VT虚拟化是什么?惠普主板怎么开启VT虚拟化?...
  3. ELM327 蓝牙/WIFI/USB diagnostic interface
  4. 百钱买百鸡C语言详解
  5. 社团划分——Fast Unfolding算法
  6. 解决SecureCRT小键盘乱码
  7. windows远程linux方法
  8. 有了这款工具,定位线上问题事半功倍|云效工程师指北
  9. baseline 和 benchmark 的区别
  10. 测试课堂:标准曲线制作、SEM检验、使用知识大全