解密Navicat保存的数据库密码

将 mysql 的密码保存到了 Navicat ,忘记了之前的密码是多少,遂 Google 了一番。

经过查看网络上的分析可知,Navicat 使用 AES 加密,加密模式为 AES-CBC,密钥为:libcckeylibcckey,向量 IV 为 libcciv libcciv ,注意后边还有一个空格。

解密代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES


def DecryptNavicat(data):
aes = AES.new('libcckeylibcckey'.encode(), AES.MODE_CBC, iv='libcciv libcciv '.encode())
text = aes.decrypt(bytes.fromhex(data))
# 删掉填充的字符
return text[0:-text[-1]].decode('utf-8')


if __name__ == '__main__':
print(DecryptNavicat('加密的密码'))

加密的密码保存位置可以在 Navicat -> 文件 -> 导出连接 中导出的 ncx 文件中找到。

或者可以在注册表中 HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers\你的连接 中对应 ip 地址中 Pwd 键值中找到。

部分代码参考自: https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password

本文章首发于个人博客 LLLibra146’s blog
本文作者:LLLibra146
版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!
本文链接https://blog.d77.xyz/archives/7b69b6a.html