Python 解密 Navicat导出的数据库连接,Navicat数据库连接导入DBeaver。

news/2024/12/19 18:13:29/文章来源:https://www.cnblogs.com/drewgg/p/18617750

最近公司收到Navicat律师告知书,让停止使用Navicat,用了那么久的数据库连接工具,不得不换其他的。

最终选择了开源的DBeaver。

安装完DBeaver后,把Navicat导出的connections.ncx文件直接导入DBeaver。直接访问提示连接失败,因为connections.ncx文件里的密码都是加密的。

如图:

 网上找了许久方法,有PHP的,复制代码去线上执行,反正跑不动,有python的,但也搞不定。

后来自己写了一个,大家可以直接使用:

#!/usr/bin/env python3
import sys
from Crypto.Hash import SHA1
from Crypto.Cipher import AES, Blowfish
from Crypto.Util import strxor, Padding
import xml.etree.ElementTree as ETclass Navicat11Crypto:def __init__(self, Key = b'3DC5CA39'):self._Key = SHA1.new(Key).digest()self._Cipher = Blowfish.new(self._Key, Blowfish.MODE_ECB)self._IV = self._Cipher.encrypt(b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF')def decrypt_string(self, s: str):if type(s) != str:raise TypeError('Parameter s must be str.')else:plaintext = b''ciphertext = bytes.fromhex(s)cv = self._IVfull_round, left_length = divmod(len(ciphertext), 8)for i in range(0, full_round * 8, 8):t = self._Cipher.decrypt(ciphertext[i:i + 8])t = strxor.strxor(t, cv)plaintext += tcv = strxor.strxor(cv, ciphertext[i:i + 8])if left_length != 0:cv = self._Cipher.encrypt(cv)plaintext += strxor.strxor(ciphertext[8 * full_round:], cv[:left_length])return plaintext.decode('ascii')if __name__ == '__main__':pc = Navicat11Crypto()xml_path_x = r'C:\Users\xxxx\connections-all-20241219.ncx'xml_path_y = r"C:\Users\xxxxx\connections.ncx"tree = ET.parse(xml_path_y)root_element = tree.getroot()for child in root_element:print('---------------------------------')print('ConnectionName:', child.attrib['ConnectionName'])print('Host:', child.attrib['Host'])print('Port:', child.attrib['Port'])print('UserName:', child.attrib['UserName'])Password1 = pc.decrypt_string(child.attrib['Password'])print('Password:', Password1)print('SSH_Host:', child.attrib['SSH_Host'])print('SSH_Port:', child.attrib['SSH_Port'])print('SSH_UserName:', child.attrib['SSH_UserName'])Password2 = pc.decrypt_string(child.attrib['SSH_Password'])print('SSH_Password:', Password2)print('------------------------------------')

  

 

执行结果:

 

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

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

相关文章

营销系统缺失投放概念

营销系统现阶段分为营销权益工具、玩法、招商提报三大块。其中权益工具主要负责创建券、促销、换购类优惠权益。玩法负责用户与平台之间的连接,通过任务式交互获得权益。招商提报主要是面向商家参与活动的连接。比如要做一个活动,需要从招商发布活动信息,提报统一创建营销权…

一款使用NET+MQTT+Arduino开发的智能浇花工具

最近闲来无事,对硬件控制产生了兴趣。看到家里的盆栽,我突然萌生了制作一个自动浇水工具的想法。通过在淘宝搜索并查找相关资料,我了解了需要的硬件和通信协议。接下来,我们先看看需要做哪些准备工作(如安装 Arduino、.NET、EMQX 工具等,请自行搜索并完成安装)。 准备工…

营销平台过去与展望

营销是什么 营销是商家给用户权益,让用户少花钱买到商品,以此达到商家的营销目的。 以此逻辑为基础,展开几个关键角色用户 平台 商家他们各自在营销侧的诉求是用户需要有获得优惠的途径 门店需要有发放优惠的能力 商家需要有优惠活动的功能营销工具权益建设 以这些诉求为切入…

圈选概念

电商系统中,最核心的几个点就是如何圈选出商品、消费者、门店 在整个逻辑中,圈选有两个点选出目标集合 给出圈选的规则选出目标集合 以商品为例,在商品选品中,选出目标集合,有几种方式通过人工方式将已有的商品列表导入到系统中 通过外部系统收集的商品列表导入到系统中,…

python 悬臂梁的有限元分析

依赖包 fenics是一种用于有限元计算的动态面向对象库,它提供了一种专用的数学语言UFL来表述变分形式,并自动生成底层C++代码。 fenics 名称释义:fe:finite element的简写 cs:computational software的简写 ni:有了fe和cs后,由于最初fenics软件是在芝加哥大学(简称为phoe…

枚举思想——算法学习(一)

枚举思想——算法学习(一)前言 在算法学习的道路上,枚举思想是一种简单却强大的思想。作为一种暴力求解方法,枚举算法通过穷尽所有可能的解,从中找到满足条件的最优解或所有解。虽然它看似“低效”,但在解决许多实际问题时却显得直观且有效,尤其是在问题规模可控的情况下…

20222307 2024-2025-1 《网络与系统攻防技术》实验八实验报告

1.实验内容 (1)Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。 (2)Web前端javascipt 理解JavaScript的基本功能,理解DOM。 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+…

《Django 5 By Example》读后感

一、 为什么选择这本书? 本人的工作方向为Python Web方向,想了解下今年该方向有哪些新书出版,遂上packt出版社网站上看了看,发现这本书出版时间比较新(2024年9月),那就它了。 从2024年11月11日至2024年12月18日期间,花了 22 天阅读完《Django 5 By Example》(《Django项目…

面向对象编程,类和对象

类的关键词 Class 类一般申明在namespace中,枚举和struct一般也在namespace中申明 类的申明语法(类前面可以加访问修饰符) class 类名 {特征——成员变量行为——成员方法保护特征——成员属性构造函数和析构函数索引器运算符重载静态成员 }类申明实例 命名使用帕斯 在同一个…

mysql mysqldump 定时备份

mysqldump方式备份Windows 一、创建bat 任务脚本 ⚠️ 内容背后不能有中文空格,否则会运行失败 新建 bat 脚本复制以下内容,安装自己的需求对内容进行修改@echo off::命令行窗口中显示此条信息 @echo 开始备份数据库::将hour设置为此刻小时位的时间,从0位置开始取2位 set h…

OCS2::ocs2_centroidal_model_质心动量模型

1. ModelHelperFunctions.cpp 1.1 updateCentroidalDynamics() : 质心动力学更新 template <typename SCALAR_T> void updateCentroidalDynamics(PinocchioInterfaceTpl<SCALAR_T>& interface, const CentroidalModelInfoTpl<SCALAR_T>& info,const …

密码学-古典密码

密码学-古典密码 前言 古典密码学(Classic cryptography)和现代密码学(Modern cryptography)的主要差别在于计算机的使用,一般来说,古典密码学是基于字符的,而现代密码学是基于二进制位的。 代换 代换密码是将明文中的字符替代成其他字符,即替代转换,若整个加密过程中…