解密Navicat密码(Java)
最近从Navicat换到了DBeaver,导出配置文件发现配置文件里的密码都是加密的,看网上的都是给的PHP代码,因为环境问题,就算是在线上运行的PHP代码也会报错,所以就把这段代码改成Java了。
package com.unicdata.system.controller.marketing;/*** @Author: PengShangXing* @Date: 2025/01/07/0007 15:13*/import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Arrays;/*** @Author: PengShangXing* @Date: 2025/01/07/0007 15:13*/
public class NavicatPassword {private int version = 0;private final String aesKey = "libcckeylibcckey";private final String aesIv = "libcciv libcciv ";private final String blowString = "3DC5CA39";private byte[] blowKey;private byte[] blowIv;public NavicatPassword(int version) {this.version = version;this.blowKey = sha1("3DC5CA39");this.blowIv = hexToBytes("d9c7c3c8870d64bd");}public String encrypt(String string) throws Exception {String result = null;switch (this.version) {case 11:result = encryptEleven(string);break;case 12:result = encryptTwelve(string);break;default:break;}return result;}private String encryptEleven(String string) throws Exception {int round = string.length() / 8;int leftLength = string.length() % 8;StringBuilder result = new StringBuilder();byte[] currentVector = blowIv;for (int i = 0; i < round; i++) {byte[] temp = encryptBlock(xorBytes(string.substring(8 * i, 8 * (i + 1)).getBytes(), currentVector));currentVector = xorBytes(currentVector, temp);result.append(bytesToHex(temp));}if (leftLength > 0) {currentVector = encryptBlock(currentVector);result.append(bytesToHex(xorBytes(string.substring(8 * round).getBytes(), currentVector)));}return result.toString().toUpperCase();}private byte[] encryptBlock(byte[] block) throws Exception {Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");SecretKeySpec keySpec = new SecretKeySpec(blowKey, "Blowfish");cipher.init(Cipher.ENCRYPT_MODE, keySpec);return cipher.doFinal(block);}private byte[] decryptBlock(byte[] block) throws Exception {Cipher cipher = Cipher.getInstance("Blowfish/ECB/NoPadding");SecretKeySpec keySpec = new SecretKeySpec(blowKey, "Blowfish");cipher.init(Cipher.DECRYPT_MODE, keySpec);return cipher.doFinal(block);}private String encryptTwelve(String string) throws Exception {Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes(), "AES");IvParameterSpec ivSpec = new IvParameterSpec(aesIv.getBytes());cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);byte[] encrypted = cipher.doFinal(string.getBytes());return bytesToHex(encrypted).toUpperCase();}public String decrypt(String string) throws Exception {String result = null;switch (this.version) {case 11:result = decryptEleven(string);break;case 12:result = decryptTwelve(string);break;default:break;}return result;}private String decryptEleven(String upperString) throws Exception {byte[] string = hexToBytes(upperString.toLowerCase());int round = string.length / 8;int leftLength = string.length % 8;StringBuilder result = new StringBuilder();byte[] currentVector = blowIv;for (int i = 0; i < round; i++) {byte[] encryptedBlock = Arrays.copyOfRange(string, 8 * i, 8 * (i + 1));byte[] temp = xorBytes(decryptBlock(encryptedBlock), currentVector);currentVector = xorBytes(currentVector, encryptedBlock);result.append(new String(temp));}if (leftLength > 0) {currentVector = encryptBlock(currentVector);result.append(new String(xorBytes(Arrays.copyOfRange(string, 8 * round, string.length), currentVector)));}return result.toString();}private String decryptTwelve(String upperString) throws Exception {// 将十六进制字符串转换为字节数组byte[] string = hexToBytes(upperString.toLowerCase());// 初始化AES解密Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");SecretKeySpec keySpec = new SecretKeySpec(aesKey.getBytes("UTF-8"), "AES");IvParameterSpec ivSpec = new IvParameterSpec(aesIv.getBytes("UTF-8"));cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);// 解密并按照UTF-8编码返回字符串return new String(cipher.doFinal(string), "UTF-8");}private byte[] xorBytes(byte[] str1, byte[] str2) {byte[] result = new byte[str1.length];for (int i = 0; i < str1.length; i++) {result[i] = (byte) (str1[i] ^ str2[i]);}return result;}private byte[] sha1(String input) {try {java.security.MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");return digest.digest(input.getBytes());} catch (Exception e) {throw new RuntimeException(e);}}private byte[] hexToBytes(String hex) {int len = hex.length();byte[] data = new byte[len / 2];for (int i = 0; i < len; i += 2) {data[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4)+ Character.digit(hex.charAt(i + 1), 16));}return data;}private String bytesToHex(byte[] bytes) {StringBuilder sb = new StringBuilder();for (byte b : bytes) {sb.append(String.format("%02x", b));}return sb.toString();}public static void main(String[] args) throws Exception {// Example usageNavicatPassword navicatPassword = new NavicatPassword(12);// DecryptString decode = navicatPassword.decrypt("xxxxx");System.out.println(decode);}}
相关文章:
解密Navicat密码(Java)
最近从Navicat换到了DBeaver,导出配置文件发现配置文件里的密码都是加密的,看网上的都是给的PHP代码,因为环境问题,就算是在线上运行的PHP代码也会报错,所以就把这段代码改成Java了。 package com.unicdata.system.con…...
某聘__zp_stoken__参数逆向还原
声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cuemhpcGluLmNvbS93ZWIvZ2Vlay9qb2I/cXVlcnk9cHl0aG9uJm…...
【数据可视化-11】全国大学数据可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
声音是如何产生的
一、音频概述 RTMP中一般音频采用aac编码,采样率为44100HZ, 每帧1024采样,帧率43,23.2ms一帧 RTC中一般音频采用opus编码,采样率为48000HZ,每帧480采样,帧率100,10ms一帧 通道数(c…...
梯度下降方法
2.5 梯度下降方法介绍 学习目标 掌握梯度下降法的推导过程知道全梯度下降算法的原理知道随机梯度下降算法的原理知道随机平均梯度下降算法的原理知道小批量梯度下降算法的原理 上一节中给大家介绍了最基本的梯度下降法实现流程,本节我们将进一步介绍梯度下降法的详细…...
web3与AI结合-Sahara AI 项目介绍
背景介绍 Sahara AI 于 2023 年创立,是一个 "区块链AI" 领域的项目。其项目愿景是,利用区块链和隐私技术将现有的 AI 商业模式去中心化,打造公平、透明、低门槛的 “协作 AI 经济” 体系,旨在重构新的利益分配机制以及…...
Nginx——反向代理(三/五)
目录 1.Nginx 反向代理1.1.Nginx 反向代理概述1.2.Nginx 反向代理的配置语法1.2.1.proxy_pass1.2.2.proxy_set_header1.2.3.proxy_redirect 1.3.Nginx 反向代理实战1.4.Nginx 的安全控制1.4.1.如何使用 SSL 对流量进行加密1.4.2.Nginx 添加 SSL 的支持1.4.3.Nginx 的 SSL 相关指…...
环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降
《港湾商业观察》施子夫 2024年12月18日,浙江环动机器人关节科技股份有限公司(以下简称,环动科技)的上市审核状态变更为“已问询”,公司在11月25日科创板IPO获上交所受理,独家保荐机构为广发证券。 此次环…...
源网荷储:构建智慧能源生态的关键方案设计
一、技术融合基石 多元能源采集技术:在 “源” 端,除了常见的光伏、风电、火电,生物质能发电、地热能利用技术也应纳入考量。例如在有丰富生物质原料的农村地区,小型生物质发电厂可实现废物利用与供电双赢;地热资源丰…...
进程间通讯
简介: 进程间通讯方式有: 1.内存映射(mmap): 使用mmap函数将磁盘空间映射到内存 2.管道 3.信号 4.套接字(socket) 5.信号机制 通过进程中kill函数,去给另一个函数发送信号&a…...
STM32-笔记33-OLED实验
实验目的 驱动 OLED 屏幕,显示点、线、字符、字符串、汉字、图片等内容。 项目实现-OLED通讯协议 复制项目文件19-串口打印功能 重命名为47-OLED实验 打开项目文件 加载文件 代码书写顺序: oled.c #include "oled.h"//初始化oled的gpio …...
低空管控技术-无人机云监视技术详解!
一、无人机监听技术的原理 无人机监听技术主要依赖于射频(RF)探测、光学和红外传感器等技术手段。这些技术通过被动监听和监测无人机与飞行员(或控制器)之间的通信链路传输,以确定无人机的位置,甚至在某些…...
RedisTemplate执行lua脚本及Lua 脚本语言详解
使用RedisTemplate执行lua脚本 在开发中,我们经常需要与Redis数据库进行交互,而Redis是一个基于内存的高性能键值存储数据库,它支持多种数据结构,并提供了丰富的命令接口。在某些情况下,我们可能需要执行一些复杂的逻…...
基于springboot的网上商城购物系统
作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 目录 项目包含: 开发说明: 系统功能: 项目截图…...
服务器攻击方式有哪几种?
随着互联网的快速发展,网络攻击事件频发,已泛滥成互联网行业的重病,受到了各个行业的关注与重视,因为它对网络安全乃至国家安全都形成了严重的威胁。面对复杂多样的网络攻击,想要有效防御就必须了解网络攻击的相关内容…...
【Unity3D】AB包加密(AssetBundle加密)
加密前: 加密后,直接无法加载ab,所以无法正常看到ab内容。 using UnityEngine; using UnityEditor; using System.IO; public static class AssetBundleDemoTest {[MenuItem("Tools/打包!")]public static void Build(){//注意:St…...
【FTP 协议】FTP主动模式
一、测试工具 服务器:FileZilla_Server-cn-0_9_60_2.exe 中文版本 客户端:FileZilla_3.66.5_win64 客户端IP: 192.168.9.186 服务端 IP: 192.168.9.161 在客户端请求PORT之前,抓包测试的结果跟被动模式流程相同。 二、客户端主动模式命令…...
十五、Vue 响应接口
文章目录 一、响应式系统基础什么是响应式系统响应式数据的声明与使用二、响应式原理深入Object.defineProperty () 方法的应用(Vue2)Proxy 对象的应用(Vue3)三、响应式接口之 ref 和 reactive(Vue3)ref 函数的使用reactive 函数的使用四、计算属性(computed)作为响应式…...
至强6搭配美光CZ122,证明CXL可以提高生成式AI的性能表现
最近发现了英特尔官网公布的一项最新测试报告,报告显示,将美光的CZ122 CXL内存模块放到英特尔至强6平台上,显著提升了HPC和AI工作负载的内存带宽,特别是在采用基于软件的交错配置(interleave configuration)…...
一文理解ssh,ssl协议以及应用
在使用基于密钥的认证方式的时候,私钥的位置一定要符合远程服务器规定的位置,否则找不到私钥的位置会导致建立ssh连接失败 SSH 全称是 “Secure Shell”,即安全外壳协议。 它是一种网络协议,用于在不安全的网络中安全地进行远程登…...
数据库设计思考
数据库设计思考:构建高效数据系统的核心逻辑 在数字化时代,数据库作为信息存储与管理的核心,其设计质量直接影响系统的性能、扩展性和安全性。无论是大型企业级应用还是小型业务系统,合理的数据库设计都能显著提升数据操作的效率…...
2026最权威的十大AI辅助论文方案解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 一篇篇DeepSeek系列论文,呈现出大型语言模型架构以及训练方法方面的系统性创新&a…...
Nunchaku FLUX.1 CustomV3效果展示:长宽比灵活适配(4:3/16:9/1:1)输出稳定性
Nunchaku FLUX.1 CustomV3效果展示:长宽比灵活适配(4:3/16:9/1:1)输出稳定性 1. 开篇:惊艳的图片生成新体验 你是否曾经遇到过这样的困扰:想要生成一张特定比例的图片,却发现AI模型总是输出不稳定的结果&…...
模电进阶:从混合π模型到放大电路的全频段分析
1. 混合π模型:高频分析的钥匙 第一次用示波器观察高频放大电路时,我盯着屏幕上畸变的波形整整懵了半小时——明明低频测试时增益稳定在100倍,输入10MHz信号后却骤降到不足30倍。这个问题困扰了我两周,直到导师扔给我一本发黄的《…...
微软简化 Windows 预览体验计划,重塑测试生态
简化频道阵容,明晰测试路径微软正在对 Windows 预览体验计划进行大刀阔斧的改革,首当其冲的是简化预览体验频道阵容。在 Windows 11 时代,复杂的四个频道让用户难以抉择,微软也承认频道结构令人困惑。新的频道阵容主要由实验版和测…...
DVWA靶场JavaScript通关实战:从源码混淆到手动生成Token的完整指南
DVWA靶场JavaScript通关实战:从源码混淆到手动生成Token的完整指南 1. 初识DVWA JavaScript挑战 DVWA(Damn Vulnerable Web Application)作为经典的Web安全学习靶场,其JavaScript Attacks模块专门设计用于训练前端安全分析能力。这…...
GPU 租用:智星云抢占式实例的极致省钱攻略
按小时计费怎么省?GPU 租用竞价策略与抢占式实例实操——以智星云为例,解锁高性价比算力开篇:算力焦虑的最佳解药大模型时代的科研与开发,往往是一场“算力”的比拼。对于个人开发者、学生群体乃至初创团队来说,动辄数…...
高级java每日一道面试题-2025年10月14日-团队协作篇[LangChain4j]-如何设计代码审查标准?
设计代码审查标准 在大型项目尤其是使用 LangChain4j 构建 AI 应用的场景中,代码审查(Code Review)不仅是保证代码质量的手段,更是知识传递、规范落地和风险控制的关键环节。设计一套科学、可执行的代码审查标准,需要从…...
高精度智慧校园安防场景图像识别 校园安全预警系统 校园安防设备智能化识别 深度学习YOLO与校园数字化智能化应用第10393期
数据集 README一、数据集核心信息项目详情类别数量及中文名称9 类(大型构件、门禁、应急门、一键报警、防撞设施、通讯工具、入侵检测、金属探测器、电视)数据总量7000 条数据集格式YOLO 格式最重要应用价值1. 支撑校园安防场景下的目标检测算法训练&…...
m4s-converter实战秘籍:解锁B站缓存视频的通用播放能力
m4s-converter实战秘籍:解锁B站缓存视频的通用播放能力 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 当你在B站缓存了珍贵的学习资…...
