java php des加密 byte数组16进制 DESTools

大家好,我是烤鸭:

    今天分享的是javaphp des 加密。

    因为接口对接,难免不同语言,加密又是必不可少的。

    作为接口的提供方,必须把加密规则写好,最好有不同语言的加密demo。


1.    java版本的des加密解密工具类

    DESTools.java

package com.xxxx.xxx.util;import java.security.Key;import javax.crypto.Cipher;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import org.apache.commons.codec.binary.Base64;public class DESTools {public static  DESTools instance;public static DESTools   getInstace(){if(instance == null){instance = new DESTools();}return instance;}Key key;/*** 密钥*/private static byte[] BOSS_SECRET_KEY = { 0x0c, 0x13, (byte) 0xe7,(byte) 0xb2, 0x51, 0x0d, 0x75, (byte) 0xc3, 0x4f, (byte) 0xdd,(byte) 0x4e, (byte) 0x51, 0x24, 0x36, (byte) 0xa6, (byte) 0x28,0x0b, 0x13, (byte) 0xe2, (byte) 0xb8, 0x31, 0x0d, 0x75, (byte) 0xc1 };private String key2 = "0b13e7b2510d75c24edd4b512436a8280b13e2b2310d75c1";public DESTools() {setKey(BOSS_SECRET_KEY);}/*** 根据参数生成KEY*/public void setKey(byte[] strKey) {try {System.out.println(bytesToHexFun3(BOSS_SECRET_KEY));DESKeySpec dks = new DESKeySpec(BOSS_SECRET_KEY);SecretKeyFactory keyFactory;keyFactory = SecretKeyFactory.getInstance("DES");this.key = keyFactory.generateSecret(dks);} catch (Exception e) {throw new RuntimeException("Error initializing DESTOOLS class. Cause: " + e);}}/*** 加密String明文输入,String密文输出*/public String getEncString(String strMing) {byte[] byteMi = null;byte[] byteMing = null;String strMi = "";Base64 base64en = new Base64();try {byteMing = strMing.getBytes("UTF8");byteMi = this.getEncCode(byteMing);strMi = base64en.encodeAsString(byteMi);} catch (Exception e) {throw new RuntimeException("Error initializing DESTOOLS class. Cause: " + e);} finally {base64en = null;byteMing = null;byteMi = null;}return strMi;}/*** 解密 以String密文输入,String明文输出* @param strMi* @return*/public String getDesString(String strMi) {Base64 base64De = new Base64();byte[] byteMing = null;byte[] byteMi = null;String strMing = "";try {byteMi = base64De.decode(strMi);byteMing = this.getDesCode(byteMi);strMing = new String(byteMing, "UTF8");} catch (Exception e) {throw new RuntimeException("Error initializing DESTOOLS class. Cause: " + e);} finally {base64De = null;byteMing = null;byteMi = null;}return strMing;}/*** 加密以byte[]明文输入,byte[]密文输出* @param byteS* @return*/private byte[] getEncCode(byte[] byteS) {byte[] byteFina = null;Cipher cipher;try {cipher = Cipher.getInstance("DES");cipher.init(Cipher.ENCRYPT_MODE, key);byteFina = cipher.doFinal(byteS);} catch (Exception e) {throw new RuntimeException("Error initializing DESTOOLS class. Cause: " + e);} finally {cipher = null;}return byteFina;}/*** 解密以byte[]密文输入,以byte[]明文输出* @param byteD* @return*/private byte[] getDesCode(byte[] byteD) {Cipher cipher;byte[] byteFina = null;try {cipher = Cipher.getInstance("DES");cipher.init(Cipher.DECRYPT_MODE, key);byteFina = cipher.doFinal(byteD);} catch (Exception e) {throw new RuntimeException("Error initializing DESTOOLS class. Cause: " + e);} finally {cipher = null;}return byteFina;}public static void main(String[] args) {DESTools desTools = new DESTools();String string = desTools.getEncString("19760519");System.out.println(string);}/*** 将16进制字符串转换为byte[]* * @param str* @return*/public static byte[] toBytes(String str) {if(str == null || str.trim().equals("")) {return new byte[0];}byte[] bytes = new byte[str.length() / 2];for(int i = 0; i < str.length() / 2; i++) {String subStr = str.substring(i * 2, i * 2 + 2);bytes[i] = (byte) Integer.parseInt(subStr, 16);}return bytes;}/*** 方法三:* byte[] to hex string* * @param bytes* @returnfor(byte b : bytes) { // 使用String的format方法进行转换buf.append(String.format("%02x", new Integer(b & 0xff)));}return buf.toString();}
}

可以看出秘钥是16进制的byte数组,先用上面的 bytesToHexFun3 方法获取字符串

得到的就是秘钥就是    0b13e7b2510d75c24edd4b512436a8280b13e2b2310d75c1

    运行main方法,对123456就行加密得到aKZ47zr+p0I=,再解密




2.    相同的php加密和解密方法

<?php
$str = '0c13e7b2510d75c34fdd4e512436a6280b13e2b8310d75c1';
$string = des_ecb_encrypt('123456',Hex2String($str));
echo '加密结果++',$string;echo '换行++++++++++++++++++++++++++++++++++';;
echo '解密结果++',des_ecb_decrypt($string,Hex2String($str));function Hex2String($hex){$string='';for ($i=0; $i < strlen($hex)-1; $i+=2){$string .= chr(hexdec($hex[$i].$hex[$i+1]));}return $string;
}
function des_ecb_encrypt($data, $key){return openssl_encrypt ($data, 'des-ecb', $key);
}
function des_ecb_decrypt ($data, $key){return openssl_decrypt ($data, 'des-ecb', $key);
}
?>

$str 就是上面java加密解密的key,先转换成16进制byte数组,再进行加密解密。

主要调用的是openssl的des加密方法。

还有别的加密模式,可以参考这篇:    https://www.36nu.com/post/252

如果你没安装wampserver的话,安装可以参考这篇。

        https://blog.csdn.net/Angry_Mills/article/details/80790522

或者你懒得安装,也可以在线调试php代码。

在线调试地址:    https://c.runoob.com/compile/1

调试结果如图:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BDD框架之Cucumber研究

BDD框架之Cucumber研究 引用链接&#xff1a;http://kongqingyun123.blog.163.com/blog/static/6377283520134158437813/ Cucumber是BDD&#xff08;行为驱动开发&#xff09;中成熟的一个框架&#xff0c;官方网址: http://cukes.info/1、cucumber安装1、安装ruby2、gem insta…

Oracle修改字段的顺序

一&#xff1a;简单粗暴 1,Oracle: create table CFORM_COULUMN_2 as &#xff08;select 字段A,字段B from CFORM_COULUMN);2,Sqlserver select 字段A,字段B.... into CFORM_COULUMN_2 from CFORM_COULUMN二&#xff1a;通过SYS数据库更新字段顺序 1&#xff0c;查询表…

[css] 怎么去掉点击a链接或者图片出现的边框?

[css] 怎么去掉点击a链接或者图片出现的边框&#xff1f; a{text-decoration:none} img{border:0 none}个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

springboot 2.x tomcat war包部署 localhost-startStop-1 启动卡顿卡死

大家好&#xff0c;我是烤鸭&#xff1a; 关于springboot war包部署tomcat。环境&#xff1a;springboot 2.0.3.RELEASEapache-tomcat-8.5.321. 修改pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org…

高可用Eureka注册中心配置说明(双机部署)

目 录 1. 高可用EureKa注册中心示意图 2. Eureka实例相互注册配置 3. 微服务注册到Eureka配置 4. 启动步骤及配置成功检查 5. 说明事项 1. 高可用EureKa注册中心示意图 Spring Cloud的Eureka Server的高可用实际上就是将自己作为服务向其他服注册中心注册自己&#xff0c;形成…

sql 把特定数据排在最前面

第一法】 select * from table where nameD UNION ALL select * from table where name<>D 第二法】SELECT CASE WHEN [name]D THEN 0 ELSE 1 END FLAG,* FROM TABLE order by flag asc

[css] css的linear-gradient有什么作用呢?

[css] css的linear-gradient有什么作用呢&#xff1f; 概念&#xff1a;线性渐变,向下/向上/向左/向右/对角方向,为了创建一个线性渐变&#xff0c;你必须至少定义两种颜色结点。颜色结点即你想要呈现平稳过渡的颜色。同时&#xff0c;你也可以设置一个起点和一个方向&#xff…

elasticsearch 6.x (四) 单一文档 API 介绍和使用 index和get API

大家好&#xff0c;我是烤鸭&#xff1a;今天分享的是官网6.x 单一文档(Single document APIs)APIs。本文这是部分翻译&#xff0c;如果想看全部的&#xff0c;还是建议阅读官方api。链接&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/docs…

Dockerfile语法

Dockerfile 语法示例 Dockerfile语法由两部分构成&#xff0c;注释和命令参数 # Line blocks used for commentingcommand argument argument ..一个简单的例子&#xff1a; # Print "Hello docker!"RUN echo "Hello docker!"Dockerfile 命令 Dockerfile有…

[css] 会引起Reflow和Repaint的操作有哪些?

[css] 会引起Reflow和Repaint的操作有哪些&#xff1f; 页面布局和几何信息(比如&#xff1a;增加删除dom&#xff0c;改变元素位置或者尺寸等)发生改变时&#xff0c;会触发Reflow。 给dom节点添加样式&#xff0c;会触发Repaint。 触发Reflow一定会引起Repaint&#xff0c;触…

Centos7离线安装Mysql8

一&#xff0c;下载tar包 1&#xff0c;直接下载&#xff1a;https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.15-1.el7.x86_64.rpm-bundle.tar 2&#xff0c;百度网盘&#xff1a;https://pan.baidu.com/s/1V180rx0FVFuUOrnPMqrVpQ 提取码&#xff1a;08jx 二&…

[css] 你有用过clip-path吗?说说你对它的理解和它都有哪些运用场景?

[css] 你有用过clip-path吗&#xff1f;说说你对它的理解和它都有哪些运用场景&#xff1f; clip-path属性可以创建一个只有元素的部分区域可以显示的剪切区域它的值可以为以下几种: 用 表示剪切元素的路径: 一种形状&#xff0c;其大小和位置由<几何盒>值定义。如果没有…

elasticsearch 6.x (五) 单一文档 API 介绍和使用 update和delete API

大家好&#xff0c;我是烤鸭&#xff1a;今天分享的是官网6.x 单一文档(Single document APIs)APIs。本文这是部分翻译&#xff0c;如果想看全部的&#xff0c;还是建议阅读官方api。链接&#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/docs…

Linux 编译安装BIND

下载网址&#xff1a;www.isc.org 首选需要安装开发环境&#xff0c;包括openssl等开发包&#xff1b; 解压文件 tar -zxvf bind*.tar.gz 创建named使用的系统用户 groupadd -g 53 -r named useradd -u 53 -r named 编译安装 …

Mysql设置忽略大小写

如果你不在意数据的话直接删除数据&#xff08;删数据库前请备份&#xff09; 1 停止MySQL 2 删除 MySQL的数据 /var/lib/mysql 3 修改该 lower_case_table_names 1 4 启动 mysql 4 搞定 解决Navicat连接MySQL出现1251-Client does not support authentication protocol requ…

[css] 你是怎么选择resetting和normalizing的?为什么?

[css] 你是怎么选择resetting和normalizing的&#xff1f;为什么&#xff1f; 一般选择normalizeReset: 比较粗暴的处理方式&#xff0c;不管有用没有统统处理成一种方式&#xff0c;如果是临时页面会采用。* {margin: 0;padding: 0;box-sizing: border-box; } *::after, *::be…

http://www.a.cn/?a.b=1 取a.b的值

$_GET[a_b] 转载于:https://www.cnblogs.com/liiu/p/9909286.html

解决svn:E200030: sqlite[S11]:database disk image is malformed

一&#xff0c;问题产生原因&#xff1a;我的电脑突然蓝屏&#xff0c;然后重启电脑后&#xff0c;更新项目提示这个鬼东西 二&#xff0c;解决方法&#xff1a; 1&#xff0c;下载sqlite3并把sqlite3.exe放到项目文件夹.svn同级目录 2&#xff0c;在项目文件夹的上面路径那里…

Java 正则表达式 工具类 中文 英文 email 手机号 身份证 数字 日期

大家好&#xff0c;我是烤鸭&#xff1a; 分享一个Java版本的正则校验工具类。 Validation.java package com.xxx.xxx.common.utils;import java.util.regex.Matcher; import java.util.regex.Pattern; /*** 验证工具类* author admin**/ public class Validation { //--…

[css] position跟margin collapse这些特性相互叠加后会怎么样?

[css] position跟margin collapse这些特性相互叠加后会怎么样&#xff1f; 怎样防止外边距重叠&#xff1f;底部元素脱离文档流(float: left/right || position: absolute/fixed)个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一…