navicat密码解密python

news/2024/11/26 8:49:51/

其他资料都是用php写的,但是运行起来好像有点问题,提供python代码,首先注册表获取加密后的密码,然后运行下述代码解密
参考:获取navicat密码

python">import hashlib
from Crypto.Cipher import AES, Blowfish
from Crypto.Util.Padding import pad, unpad
from binascii import unhexlify, hexlifyclass NavicatPassword:def __init__(self, version=12):self.version = versionself.aes_key = b'libcckeylibcckey'self.aes_iv = b'libcciv libcciv 'self.blow_string = '3DC5CA39'self.blow_key = hashlib.sha1(b'3DC5CA39').digest()self.blow_iv = bytes.fromhex('d9c7c3c8870d64bd')def xor_bytes(self, str1, str2):return bytes([a ^ b for a, b in zip(str1, str2)])def encrypt(self, string):if self.version == 11:return self.encrypt_eleven(string)elif self.version == 12:return self.encrypt_twelve(string)else:return Nonedef encrypt_eleven(self, string):string = pad(string.encode(), Blowfish.block_size)rounds = len(string) // 8left_length = len(string) % 8result = b''current_vector = self.blow_ivfor i in range(rounds):block = string[i * 8:(i + 1) * 8]temp = self.encrypt_block(self.xor_bytes(block, current_vector))current_vector = self.xor_bytes(current_vector, temp)result += tempif left_length:current_vector = self.encrypt_block(current_vector)result += self.xor_bytes(string[rounds * 8:], current_vector)return hexlify(result).upper().decode()def encrypt_block(self, block):cipher = Blowfish.new(self.blow_key, Blowfish.MODE_ECB)return cipher.encrypt(block)def decrypt_block(self, block):cipher = Blowfish.new(self.blow_key, Blowfish.MODE_ECB)return cipher.decrypt(block)def encrypt_twelve(self, string):cipher = AES.new(self.aes_key, AES.MODE_CBC, self.aes_iv)result = cipher.encrypt(pad(string.encode(), AES.block_size))return hexlify(result).upper().decode()def decrypt(self, string):if self.version == 11:return self.decrypt_eleven(string)elif self.version == 12:return self.decrypt_twelve(string)else:return Nonedef decrypt_eleven(self, upper_string):string = unhexlify(upper_string.lower())rounds = len(string) // 8left_length = len(string) % 8result = b''current_vector = self.blow_ivfor i in range(rounds):encrypted_block = string[i * 8:(i + 1) * 8]temp = self.xor_bytes(self.decrypt_block(encrypted_block), current_vector)current_vector = self.xor_bytes(current_vector, encrypted_block)result += tempif left_length:current_vector = self.encrypt_block(current_vector)result += self.xor_bytes(string[rounds * 8:], current_vector)return result.decode(errors='ignore')def decrypt_twelve(self, upper_string):string = unhexlify(upper_string.lower())cipher = AES.new(self.aes_key, AES.MODE_CBC, self.aes_iv)return unpad(cipher.decrypt(string), AES.block_size).decode()# Example usage
navicat_password = NavicatPassword(11)
decoded = navicat_password.decrypt('7EAA549760822DA9A89CBBE9')
print(decoded)


http://www.ppmy.cn/news/1550015.html

相关文章

内存不足引发C++程序闪退崩溃问题的分析与总结

目录 1、内存不足一般出现在32位程序中 2、内存不足时会导致malloc或new申请内存失败 2.1、malloc申请内存失败,返回NULL 2.2、new申请内存失败,抛出异常 3、内存不足项目实战案例中相关细节与要点说明 3.1、内存不足导致malloc申请内存失败&#…

【Pytest+Yaml+Allure】实现接口自动化测试框架

一、框架思想 requestsyamlpytestallure实现接口自动化框架。结合数据驱动和分层思想,将代码与数据分离,易维护,易上手。使用yaml编写编写测试用例,利用requests库发送请求,使用pytest管理用例,allure生成…

Linux常用指令(1)

目录 何为指令 基本常用指令 1.clear 2.exit 3.whoami 4.pwd 5.which 6.alias 7.tree ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令 && rm指令 rmdir指令 rm指令 man指令 cp指令 何为指令 指令的本质其实就是可执行程序。 指令 可执行文件…

第十章 作业

在网页中显示一个工作中的“数字时钟” <!DOCTYPE html> <html><head><meta charset"utf-8"><title>动态时钟</title><style>.all{width: 600px;height: 300px;margin: 100px auto;text-align: center;font-size: 50px;}…

(vue)el-tag标签展开收起效果实现

(vue)el-tag标签展开收起效果实现 效果&#xff1a; 收起: 展开&#xff1a; 实现方法 父组件 <el-form-item class"historay-form-item" label"历史文件"><UploadList ref"uploadListRef" /> </el-form-item><script…

rabbitmq exchange queue topic的关系

在RabbitMQ中&#xff0c;Exchange、Queue 和 Topic 是三个核心概念&#xff0c;它们之间有着密切的关系。理解这些概念及其相互作用对于正确使用RabbitMQ非常重要。下面是对这三个概念的详细解释以及它们之间的关系&#xff1a; 1. Exchange&#xff08;交换器&#xff09; …

Sortable插件实现最简单的拖拽效果

1.安装并引入Sortable插件 2.直接获取需要拖动的dom节点 <template><div><ul id"list"><li v-for"item in list1" :key"item.id" :data-id"item.id" v-on:drag"saveDragItem">{{ item.name }}<…

【Rust练习】23.生命周期

练习题来自https://practice-zh.course.rs/lifetime/basic.html 1 /* 为 i 和 borrow2 标注合适的生命周期范围 */// i 拥有最长的生命周期&#xff0c;因为它的作用域完整的包含了 borrow1 和 borrow2 。 // 而 borrow1 和 borrow2 的生命周期并无关联&#xff0c;因为它们的…