场景:
经常会遇到这种场景,别人跟你说了数据库连接,你听完顺手就通过Navicat连上了,过了几天后你要在项目中更新成这个链接恰巧你的记忆力和我一样没有记住,又不想再问别人了,这时如何通过Navicat来查看当时输入的密码呢?
解决:
获取加密后的密码
选择文件,选择导出连接,勾选需要导出的数据库,一定要勾选导出密码,导出之后我们会得到一个名为connections.ncx的文件,在当中找出password,然后复制出来
密码解密-通过Python
# -*- coding: utf-8 -*-
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
# 如果text不足16位的倍数就用空格补足为16位
def add_to_16(text):
if len(text.encode('utf-8')) % 16:
add = 16 - (len(text.encode('utf-8')) % 16)
else:
add = 0
text = text + ('\0' * add)
return text.encode('utf-8')
# 加密函数
def encrypt(text):
key = 'libcckeylibcckey'.encode('utf-8')
mode = AES.MODE_CBC
iv = b'libcciv libcciv '
text = add_to_16(text)
cryptos = AES.new(key, mode, iv)
cipher_text = cryptos.encrypt(text)
print(b2a_hex(cipher_text))
# 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
return b2a_hex(cipher_text)
# 解密后,去掉补足的空格用strip() 去掉
def decrypt(text):
key = 'libcckeylibcckey'.encode('utf-8')
iv = b'libcciv libcciv '
mode = AES.MODE_CBC
cryptos = AES.new(key, mode, iv)
plain_text = cryptos.decrypt(a2b_hex(text))
return bytes.decode(plain_text).rstrip('\0').replace('','')
if __name__ == '__main__':
e=encrypt('root')
print("加密:",e)
d = decrypt('4b8b909f59e7c7613365f10197907517') # 解密
print("解密:", d)
python3 depassword.py
遇到的问题:
使用的mac系统,在使用Python解密的时候,报如下错误:
ImportError: No module named Crypto.Cipher
解决方法如下:
pip3 uninstall crypto
pip3 uninstall pycrypto
# 重新安装pycrypto
pip3 install pycrypto