ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

一套算法5种实现:how-does-navicat-encrypt-password的C/C++、C、Java、VB.NET跨语言横向对比

一套算法5种实现:how-does-navicat-encrypt-password的C/C++、C、Java、VB.NET跨语言横向对比 一套算法5种实现how-does-navicat-encrypt-password的C/C、C#、Java、VB.NET跨语言横向对比【免费下载链接】how-does-navicat-encrypt-passwordTransferred from https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password项目地址: https://gitcode.com/gh_mirrors/ho/how-does-navicat-encrypt-passwordhow-does-navicat-encrypt-password 是一个专门破解Navicat 密码加密原理的开源项目它把同一套 Navicat 密码加密 / 解密算法用 C/C、C#、Java、VB.NET、Python3 五种语言各实现了一遍。本文带你横向对比这 5 份实现用最少的时间看懂 Navicat 密码解密是怎么在代码层面落地的。一、Navicat 密码加密原理30 秒看懂核心流程先看为什么会有这个项目在 Navicat 里创建连接并勾选Save Password后密码并不是明文保存而是加密后写入Windows 注册表如HKEY_CURRENT_USER\Software\PremiumSoft\Navicat\Servers下的连接项。打开注册表你看到的是一长串十六进制密文官方算法文档doc/how-does-navicat-encrypt-password.md把整个过程拆成 4 步生成密钥对固定字符串3DC5CA39做 SHA-1用 20 字节摘要作为 Blowfish 密钥初始化 IV把 8 字节全0xFF的块用 Blowfish 加密一次结果就是初始向量流水线加密明文块依次与当前向量异或 → Blowfish 加密 → 密文回填向量形成链式处理十六进制存储把每个密文块转成 hex 字符串拼接后写入注册表。从 Navicat 12 开始.ncx 导出文件改用AES128/CBC/PKCS7密钥和 IV 硬编码为libcckeylibcckey/libcciv libcciv更新的版本则使用 AES-256-GCM密钥是存于 Windows 凭据管理器、与机器绑定的navicat_cred。二、五种语言实现对照总览表语言核心文件代码规模算法来源算法覆盖C/Ccpp/NavicatCrypto.hpp约 1140 行含自写算法库完全自实现Blowfish AES SHA-1v1 v2C#csharp/NavicatCrypto.cs、csharp/Blowfish.cs约 440 行自写 Blowfish 系统自带 AESv1 v2Javajava/NavicatCrypto/约 235 行JDK 内置 JCE 标准库v1 v2VB.NETvb.net/NavicatEncrypt.vb约 190 行第三方 CryptSharp 库仅 v1Python3python3/navicat-cipher.py约 241 行cryptography 库v1 v2 v3一张表就能看出规律5 份代码的骨架几乎可以逐行对译密钥推导、IV 初始化、主循环完全一致真正拉开差异的是各语言算法库从哪里来。三、横向对比5 种实现各自怎么选算法库3.1 C/C全部手写零依赖cpp/NavicatCrypto.hpp一个头文件里同时给出Navicat11CryptoBlowfish 版与Navicat12CryptoAES 版两个类它依赖的 Blowfish、AES128、SHA-1 全部自实现cpp/blowfish.c、cpp/aes.c、cpp/sha1.c无任何第三方依赖。由于 C/C 需要手动处理字节与内存代码大量使用union把 8 字节按 64 位整数一次异或效率极高同时显式传入BLOWFISH_BIG_ENDIAN确保字节序与 Navicat 一致。3.2 C#自写 Blowfish 系统 AES 的双轨制早期 .NET 框架没有内置 Blowfish所以csharp/Blowfish.cs301 行手写了完整算法而 AESNavicat 12 算法则直接调用系统AesCryptoServiceProvider几行配置CipherMode.CBC PaddingMode.PKCS7即可完成。这种缺的自写、有的直接用是 .NET 加密实现的典型思路。3.3 Java全靠标准库代码最精简JDK 的 JCE 很早就内置了 Blowfishjava/NavicatCrypto/Navicat11Cipher.java只需一行Cipher.getInstance(Blowfish/ECB/NoPadding)XOR 链自己补上Navicat 12 算法则交给AES/CBC/PKCS5PaddingAES 场景下 PKCS5 与 PKCS7 等价。如果你是新手建议从这份实现读起——它是 5 份里最薄的。3.4 VB.NET第三方 CryptSharp 补位vb.net/NavicatEncrypt.vb是从原版 Python 移植而来Blowfish 依赖第三方 CryptSharp 库SHA-1 用内置SHA1。整体结构与 C# 版一一对应InitCipher/InitIV/ 主循环是 C# 与 VB.NET 互相对照阅读的好例子。3.5 Python3cryptography 库 唯一支持 v3 新算法python3/navicat-cipher.py是功能最全的一份除 v1Blowfish、v2AES-CBC外还实现了新版 Navicat 使用的v3 算法AES-256-GCM 机器绑定的navicat_cred密钥。配套脚本python3/ncx-dump.py解析 .ncx 连接文件和python3/show-navicat.py列出并解密注册表中的全部连接让它成为 5 种语言里唯一开箱即用的工具——其他语言更偏向算法参考实现。四、细节差异同一算法在不同语言里的处理尾部块处理明文长度不是 8 字节整数倍时5 份实现都会对当前向量额外加密一次再只异或剩余字节——对应流水线图的最后一步十六进制编码C/C 自己写BytesToHexJava 用DatatypeConverter.printHexBinaryC# 用BitConverter.ToString去掉连字符结果统一为大写 hex字节序C 与 C# 显式指定大端参数Java、Python 由库内部处理这是一个容易被忽略的隐性差异自定义密钥C、C#、Java、Python 都提供接收自定义字符串的构造函数内部同样做 SHA-1方便验证算法正确性。五、新手阅读路线从哪份代码开始读先读算法文档doc/how-does-navicat-encrypt-password.md吃透密钥 → IV → 流水线 → 存储四步再看代码就不迷路Java 版入门Navicat11Cipher.java不到 190 行标准库调用直观主循环就十几行Python 版动手navicat-cipher.py函数划分最清晰命令行直接 enc/dec 可立即验证C / C# / VB.NET 交叉对照重点看各语言如何各自解决内存、字节序、hex 转换三件事。 小练习用任意两种语言分别加密同一段明文得到的 hex 密文应该与 Navicat 注册表里的一模一样——这是检验算法理解最快的方式。六、常见疑问 FAQQ为什么 Navicat 用的是这种较弱的加密A它的目标是避免明文直接暴露而非军事级防护——密钥就硬编码在程序里拿到本机的人必然能解密。Q加密密码复制到另一台电脑还能用吗Av1 / v2 密文是全局通用的密钥固定v3 绑定机器相关的navicat_cred换机即失效。Q这个项目适合做什么A学习密码学落地细节、开发连接管理工具、解密自己备份的 .ncx 连接密码等场景。七、项目文件索引算法原理文档doc/how-does-navicat-encrypt-password.mdC/C 实现cpp/NavicatCrypto.hpp配套自写cpp/blowfish.c、cpp/aes.c、cpp/sha1.cC# 实现csharp/NavicatCrypto.cs、csharp/Blowfish.csJava 实现java/NavicatCrypto/Navicat11Cipher.java、java/NavicatCrypto/Navicat12Cipher.javaVB.NET 实现vb.net/NavicatEncrypt.vbPython3 实现与工具python3/navicat-cipher.py、python3/ncx-dump.py、python3/show-navicat.py【免费下载链接】how-does-navicat-encrypt-passwordTransferred from https://github.com/DoubleLabyrinth/how-does-navicat-encrypt-password项目地址: https://gitcode.com/gh_mirrors/ho/how-does-navicat-encrypt-password创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表