当前位置: 首页 > article >正文

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具挡

一、项目背景与核心价值1. 解决的核心痛点Navicat的数据库连接密码并非明文存储而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码常规方式只能重新配置连接效率极低。本项目只作为学习研究使用不做其他使用。2. 项目核心价值跨平台运行基于Avalonia与.NET 8支持Windows、macOS、Linux全平台多场景解密支持配置文件批量解析、单条连接解密、手动输入密文解密三种模式易用性拉满现代化UI界面支持深色模式操作流程极简轻量高效无需复杂依赖基于.NET原生能力实现核心算法解密速度毫秒级。二、技术栈选型与考量NavicatPassword的技术栈选择围绕「跨平台、低耦合、高性能」三个核心目标具体选型如下技术领域 选型 选型考量前端UI框架 Avalonia UI 替代WPF的跨平台UI框架API与WPF高度兼容原生支持多平台、深色模式、响应式布局后端开发语言 C# (.NET 8) .NET 8跨平台能力强性能优异原生支持加密算法、XML解析等核心能力架构模式 MVVM (CommunityToolkit.Mvvm) 解耦UI与业务逻辑简化数据绑定、命令管理提升代码可维护性加密算法 AES-128-CBC 匹配Navicat官方的加密标准保证解密准确性数据存储 SQLite 轻量级嵌入式数据库用于保存用户的解密设置、历史记录等配置文件解析 .NET XmlDocument/XDocument 原生XML解析能力高效处理Navicat的.ncx配置文件三、项目架构设计MVVM项目严格遵循MVVM架构模式代码目录结构与职责划分清晰核心目录如下对应项目NavicatPassword/目录NavicatPassword/├── Views/ # 视图层UI界面Axaml文件仅负责展示无业务逻辑│ ├── MainView.axaml # 主界面解密操作核心页面├── ViewModels/ # 视图模型层连接View与Model处理UI交互逻辑│ ├── MainViewModel.cs # 主界面逻辑文件选择、批量解密、单条解密├── Services/ # 服务层核心业务逻辑封装│ ├── SystemService.cs # 密码解密核心服务├── Utils/ # 工具层解密方法└── App.axaml.cs # 应用入口全局配置各层核心职责View视图层仅通过Axaml定义UI结构通过数据绑定绑定ViewModel的属性和命令无任何业务代码ViewModel视图模型层通过ObservablePropertyCommunityToolkit.Mvvm特性实现属性通知通过ICommand处理按钮点击、文件选择等UI交互调用Service层完成核心逻辑Service服务层封装核心业务逻辑解密、文件解析是项目的「业务核心」ViewModel仅调用Service不直接处理业务Model模型层定义数据结构如数据库连接信息、应用配置等仅承载数据无业务逻辑。这种架构的优势在于UI与业务逻辑完全解耦后续无论是修改界面样式还是优化解密算法都无需改动其他层的代码可维护性和扩展性大幅提升。四、核心功能实现解析1. 密码解密核心算法AES-128-CBCNavicat的密码加密采用固定的Key和IV这是解密的关键。项目的核心解密代码如下且完全基于.NET原生System.Security.Cryptography实现using System.Security.Cryptography;using System.Text;namespace NavicatPassword.Services;public static class NavicatDecryptService{// Navicat固定的Key和IV核心private static readonly byte[] _key Encoding.UTF8.GetBytes(libcckeylibcckey);private static readonly byte[] _iv Encoding.UTF8.GetBytes(libcciv libcciv );////// 解密Navicat加密的密码字节数组//////加密后的字节数组///明文密码///解密失败时抛出异常public static string DecryptNavicatPassword(byte[] cipherBytes){if (cipherBytes null || cipherBytes.Length 0){throw new ArgumentException(加密字节数组不能为空, nameof(cipherBytes));}try{using Aes aes Aes.Create();// 匹配Navicat的加密模式CBC PKCS7填充aes.Mode CipherMode.CBC;aes.Padding PaddingMode.PKCS7;aes.Key _key;aes.IV _iv;// 创建解密器并执行解密ICryptoTransform decryptor aes.CreateDecryptor(aes.Key, aes.IV);byte[] plainBytes decryptor.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);// 转换为UTF8明文return Encoding.UTF8.GetString(plainBytes);}catch (Exception ex){throw new ArgumentException(解密失败可能是密文格式错误, ex);}}////// 重载解密Base64编码的密文字符串//////Base64密文/// 明文密码public static string DecryptNavicatPassword(string cipherBase64){byte[] cipherBytes Convert.FromBase64String(cipherBase64);return DecryptNavicatPassword(cipherBytes);}}关键细节说明固定Key/IVNavicat所有版本均使用libcckeylibcckeyKey和libcciv libccivIV这是解密的核心前提填充模式必须使用PKCS7而非PKCS5否则解密结果会出现乱码异常处理针对空值、格式错误等场景做了容错保证用户体验。2. .ncx配置文件解析Navicat的.ncx文件是XML格式核心是节点包含连接名称、地址、加密密码等信息。解析逻辑封装在NcxFileParserService中核心步骤如下using System.Xml.Linq;using NavicatPassword.Models;namespace NavicatPassword.Services;public class NcxFileParserService{////// 解析.ncx配置文件提取所有数据库连接信息//////配置文件路径/// 数据库连接列表public List ParseNcxFile(string filePath){if (!File.Exists(filePath)){throw new FileNotFoundException(配置文件不存在, filePath);}XDocument doc XDocument.Load(filePath);var connections new List();// 遍历所有Connection节点foreach (var connNode in doc.Descendants(Connection)){var connection new NavicatConnection{Name connNode.Attribute(Name)?.Value ?? string.Empty,Host connNode.Element(Host)?.Value ?? string.Empty,Port connNode.Element(Port)?.Value ?? string.Empty,Database connNode.Element(Database)?.Value ?? string.Empty,// 加密密码是Base64编码的字符串CipherPassword connNode.Element(Password)?.Value ?? string.Empty};// 自动解密可选if (!string.IsNullOrEmpty(connection.CipherPassword)){try{connection.PlainPassword NavicatDecryptService.DecryptNavicatPassword(connection.CipherPassword);}catch{connection.PlainPassword 解密失败;}}connections.Add(connection);}return connections;}}解析逻辑的核心是提取节点的属性和子节点值并自动调用解密方法生成明文密码最终封装为NavicatConnection模型返回给ViewModel由View展示。五、跨平台适配要点基于Avalonia和.NET 8项目的跨平台适配几乎「零成本」但仍有几个关键细节需要注意文件路径适配需要自己手动导出文件打开Navicat-文件-导出连接-导出密码(一定要勾选弹框底部导出密码否则解析不到密码修正路径.ncx)UI适配Avalonia的布局系统原生支持响应式通过Grid、StackPanel等布局控件保证在不同分辨率、不同系统下的UI一致性深色模式通过Avalonia的ThemeVariant实现无需单独开发。发布打包通过.NET Publish命令可一键打包不同平台的可执行文件# Windows (x64)dotnet publish -c Release -r win-x64 --self-contained true -o publish/win# macOS (x64)dotnet publish -c Release -r osx-x64 --self-contained true -o publish/macos# Linux (x64)dotnet publish -c Release -r linux-x64 --self-contained true -o publish/linux六、使用场景与落地效果1. 核心使用场景开发人员找回密码忘记Navicat连接密码快速解析配置文件找回运维批量管理批量解析服务器上的Navicat配置文件统一管理数据库连接密码测试环境核查验证测试环境数据库密码是否符合规范提升安全合规性已通过测试版本Navicat Premium Lite (Free) 17.3.6版本。附项目快速上手从源码构建# 克隆仓库git clone https://gitee.com/dingshuanglei/NavicatPassword.gitorgit clone https://github.com/dingshuanglei/NavicatPassword.git# 进入目录cd NavicatPassword# 构建项目dotnet build -c Release# 运行dotnet run --project NavicatPassword/NavicatPassword.csproj核心操作流程选择Navicat的.ncx配置文件自动解析所有连接批量解密/单条解密查看明文密码或手动输入密文一键解密。筛酶竟芳

相关文章:

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具挡

一、项目背景与核心价值 1. 解决的核心痛点 Navicat的数据库连接密码并非明文存储,而是通过AES算法加密后写入.ncx格式的XML配置文件中。一旦用户忘记密码,常规方式只能重新配置连接,效率极低。本项目只作为学习研究使用,不做其他…...

网钛CMS:经典PHP内容管理系统的源码解析与博客搭建指南

在当今数字化浪潮中,内容管理系统(CMS)已成为网站建设的核心工具。对于追求高效、灵活且功能强大的博客站长而言,选择一款合适的CMS至关重要。网钛CMS作为一款经典的PHP内容管理系统,凭借其开源特性、丰富的功能模块和…...

终极指南:3分钟完成AI文本生成平台一键安装

终极指南:3分钟完成AI文本生成平台一键安装 【免费下载链接】one-click-installers Simplified installers for oobabooga/text-generation-webui. 项目地址: https://gitcode.com/gh_mirrors/on/one-click-installers 还在为复杂的AI环境配置而头疼吗&#…...

MeteorSeed下

这个代码的核心功能是:基于输入词的长度动态选择反义词示例,并调用大模型生成反义词,体现了 “动态少样本提示(Dynamic Few-Shot Prompting)” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...

Python的asyncio事件循环与不同事件循环策略的性能影响分析

Python的asyncio事件循环与不同事件循环策略的性能影响分析 Python的asyncio模块为异步编程提供了强大的支持,其核心是事件循环机制。事件循环负责调度和执行异步任务,而不同的循环策略可能对性能产生显著影响。随着高并发应用需求的增长,理…...

统计学实战指南——指数在商业决策中的应用

1. 为什么商业决策需要指数分析? 每次看到超市里商品价格标签更换时,你可能不知道背后藏着大学问。去年我们服务的一家连锁超市就遇到个典型问题:他们发现牛奶销售额下降了15%,但单看进货价和售价都没变化。后来用价格指数分析才发…...

GB/T28181设备接入WVP平台保姆级教程:从海康到大华的配置避坑指南

GB/T28181设备接入WVP平台实战指南:海康/大华/宇视全品牌配置解析 第一次接触GB/T28181协议时,我盯着设备ID和SIP服务器配置页面发呆了半小时——这些看似简单的字段背后藏着太多细节陷阱。本文将用真实项目经验,带你拆解不同品牌设备在WVP平…...

终极指南:如何让macOS原生支持所有视频格式预览

终极指南:如何让macOS原生支持所有视频格式预览 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode.com/…...

终极方案:如何在Windows上解锁Apple触控板的完整手势体验

终极方案:如何在Windows上解锁Apple触控板的完整手势体验 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad…...

DanmakuFactory:终极弹幕格式转换工具,轻松实现专业级视频互动

DanmakuFactory:终极弹幕格式转换工具,轻松实现专业级视频互动 【免费下载链接】DanmakuFactory 支持特殊弹幕的xml转ass格式转换工具 项目地址: https://gitcode.com/gh_mirrors/da/DanmakuFactory 你是否曾经遇到过这样的困扰:在B站…...

用一节干电池给STM32F103供电?手把手教你搞定体重秤的低功耗升压电路(附ME2108模块选型)

单节干电池驱动STM32F103的实战指南:从升压电路设计到低功耗优化 在电子设计领域,最令人着迷的挑战之一就是如何用最有限的能源实现最复杂的功能。想象一下,仅凭一节普通的AA干电池(1.5V)就能驱动一个完整的STM32F103微…...

前端使用AI试水报告扇

1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容: 渲染代码: # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-template/bl…...

佳能最新清零软件ServiceTool_v6.200 ,TS3380,G1800,G2810,G3810,G4810,MG3680,IX6700,代码5B00,P07,E08,1700,5b04,有效

下载:点这里下载 备用:https://pan.baidu.com/s/1WrPFvdV8sq-qI3_NgO2EvA?pwd0000 常见型号如下: G系列 G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1510、G1520、G1810、G1820、G191…...

G3810,TS3380,G1800,G2810,G4810,MG3680,IX6780,MP288,TS8380打印机废墨垫清零软件,错误代码5B00,P07,E08,1700,5b04,亲测有效。

下载:点这里下载 备用:https://pan.baidu.com/s/1WrPFvdV8sq-qI3_NgO2EvA?pwd0000 常见型号如下: G系列 G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1510、G1520、G1810、G1820、G191…...

STM32G474定时器PWM实战:从输出控制到输入捕获全解析

1. STM32G474定时器PWM基础概念 PWM(脉冲宽度调制)是嵌入式系统中最常用的信号控制技术之一。简单来说,PWM就是通过快速开关数字信号来模拟模拟量输出的方法。想象一下你用手指快速开关电灯开关,开关速度足够快时,灯泡…...

XHS-Downloader:小红书无水印内容采集的终极解决方案

XHS-Downloader:小红书无水印内容采集的终极解决方案 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接&…...

如何利用XTDrone仿真平台快速验证无人机算法:问题驱动实战指南

如何利用XTDrone仿真平台快速验证无人机算法:问题驱动实战指南 【免费下载链接】XTDrone UAV Simulation Platform based on PX4, ROS and Gazebo 项目地址: https://gitcode.com/gh_mirrors/xt/XTDrone 你是否在无人机算法研究中遇到了这样的困境&#xff1…...

人流量统计测试视频获取方式

1 打开国外摄像头网站 https://riat-.blog.csdn.net/article/details/156447639?spm1011.2415.3001.5331 2 使用ubuntu自带录屏软件 Ctrl shift alt R 就可以开始录屏 停止录屏:打开屏幕右下角,停止录屏...

ofa_image-caption_coco_distilled_en实战案例:用URL/本地图批量生成英文描述的高效方案

ofa_image-caption_coco_distilled_en实战案例:用URL/本地图批量生成英文描述的高效方案 1. 项目概述:让图片自动"说话"的智能工具 你有没有遇到过这样的情况:手头有大量图片需要添加描述,但一张张手动编写既费时又费…...

如何用三月七小助手实现崩坏星穹铁道全自动游戏:终极高效教程

如何用三月七小助手实现崩坏星穹铁道全自动游戏:终极高效教程 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星穹铁道》中繁琐…...

【2026年网易互娱暑期实习/春招- 4月12日-第一题- 照明】(题目+思路+JavaC++Python解析+在线测试)

题目内容 给定一个 nnn 行 mmm 列的网格地图,每个格子是以下字符之一: ‘#’:障碍物; ‘.’:空地; ‘/’、’ \ :镜子; ‘LL...

无需高配电脑!Stable Diffusion 3.5 FP8镜像低显存运行方案

无需高配电脑!Stable Diffusion 3.5 FP8镜像低显存运行方案 1. 为什么选择FP8量化版本? Stable Diffusion 3.5作为Stability AI最新推出的文本到图像生成模型,在图像质量、语义理解和文字渲染方面都有显著提升。但原版模型对硬件要求较高&a…...

MinerU智能文档服务一文详解:如何用自然语言指令替代传统OCR工具

MinerU智能文档服务一文详解:如何用自然语言指令替代传统OCR工具 你是不是还在为处理PDF报告、扫描文件或者截图里的文字而头疼?是不是觉得传统的OCR工具用起来特别麻烦——先要上传文件,然后等它识别,最后还得手动整理格式&…...

深入解析倍福ADS协议:Notification模式在工业数据实时监控中的应用实践

1. 工业数据监控的痛点与ADS协议的价值 在现代化工厂的生产线上,每分钟都有成千上万的数据点需要采集和分析。我曾经参与过一个汽车焊接车间的改造项目,产线上200多个传感器每50毫秒就要上报一次数据。最初采用传统的轮询方式采集,结果发现网…...

使用Spring AI Alibaba构建智能体Agent拔

背景 在软件开发的漫长旅途中,"构建"这个词往往让人又爱又恨。爱的是,一键点击,代码变成产品,那是程序员最迷人的时刻;恨的是,维护那一堆乱糟糟的构建脚本,简直是噩梦。 在很多项目中…...

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico伪

1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)&#xff09…...

7B参数模型在消费级GPU上的极限:Token生成速度优化全记录

7B参数模型在消费级GPU上的极限:Token生成速度优化全记录 当你在RTX 3090上加载7B参数模型时,是否经历过这样的场景——看着显存占用接近饱和,而token生成速度却像蜗牛爬行?这背后是显存带宽、计算核心利用率、批处理策略等多重因…...

YOLOv8/v11-ONNX-QT-C++实战:从模型推理到界面渲染的性能调优与稳定性保障指南

1. YOLOv8模型在QT-C环境中的性能瓶颈分析 第一次把YOLOv8模型部署到QT界面时,我遇到了一个典型问题:明明模型推理结果正确,但整个界面卡得像幻灯片。通过性能分析工具发现,单帧处理时间竟然高达150ms,完全达不到实时性…...

STM32新手必看:用CH340模块烧录程序的5个常见错误及解决方法

STM32与CH340模块烧录全攻略:从驱动安装到实战避坑指南 第一次接触STM32开发板时,那块蓝色的小板子躺在桌面上,USB线连着电脑却毫无反应——这场景恐怕是许多嵌入式开发者的共同记忆。作为性价比最高的ARM Cortex-M系列微控制器,S…...

CANoe_UDS-Bootloader刷写系列-含源码(一)从零构建刷写流程框架

1. 从零搭建UDS Bootloader刷写框架的底层逻辑 第一次接触汽车ECU刷写的工程师,往往会被各种服务编号和流程搞得晕头转向。我刚开始做车载诊断时,面对$10、$27这些神秘代码也是一头雾水。后来发现,理解刷写流程就像组装乐高积木——只要掌握每…...