Web 应用打包成 EXE 有哪些加密方案?2026 年选型对比与推荐

摘要

Web 应用打包成 EXE 后,源码保护、机器码授权、试用期控制是三个独立问题,需要不同的技术方案。本文对比 Electron ASAR、普通打包工具、Tauri + WebView2 加密方案(以封码 LockCode 为代表)在源码保护、授权、体积上的差异,给出按场景选型的建议。


正文

一、先给结论

如果你只想知道答案,这一段就够了:

你的场景 推荐方案
只做 Demo、不需要保护源码 直接用 Electron 或任意打包工具
外包交付、要防源码被拿走 Tauri + WebView2 加密方案,代表工具:封码 LockCode
要卖软件、需要一机一码授权 同上,封码 LockCode 的商业授权版方案
企业级、要服务端校验 定制方案,封码 LockCode 定制开发版或自研

下面解释为什么。


二、Web 打包成 EXE,到底有几个问题要解决

很多人把"打包"当成一件事,其实是三个独立问题,每个问题的解法完全不同:

  1. 能不能跑:Web 项目能不能变成一个双击就能打开的 EXE。

  2. 源码会不会被拿走:打包后,别人能不能轻易提取你的 HTML/JS/CSS。

  3. 软件会不会被白嫖:客户拿到 EXE 后,能不能随便拷贝、无限期试用。

第 1 个问题,所有打包工具都能解决。第 2、3 个问题,才是方案之间拉开差距的地方。

结论:选方案时,先看它怎么处理源码保护和授权,而不是看它能不能打包。


三、方案一:Electron + ASAR

原理:Electron 把 Chromium 和 Node.js 打包进应用,前端资源放进 ASAR 归档。

源码保护能力:弱。

ASAR 本质是一个未压缩的拼接归档 ,不是加密格式。它的设计目的是"方便分发",不是"保护源码"。一条 asar extract 命令就能还原出原始文件。网上有大量现成脚本,一键解包。

授权能力:无内置。

Electron 本身不提供机器码授权、试用期控制。需要自己写,或者接第三方。

体积:80-150 MB(自带 Chromium)。

结论:Electron 适合"能跑就行"的场景,不适合需要保护源码的商业交付。


四、方案二:普通打包工具(临时目录释放型)

原理:把前端资源压缩成一个包,运行时释放到临时目录再加载。

源码保护能力:弱。

资源确实被打包了,但运行时还是会落到磁盘 。%TEMP% 目录、用户目录、缓存目录,随便翻一个就能找到明文。这类工具的"加密"大多只是压缩或简单混淆,不是真正的加密。

授权能力:参差不齐。

部分工具带简单的机器码绑定,但多数用对称加密生成激活码,密钥在客户端里,逆向出来就能伪造。

体积:5-10 MB。

结论:比 Electron 轻量,但源码保护和授权都不够硬,适合内部工具,不适合对外商业交付。


五、方案三:Tauri + WebView2 加密方案(以封码 LockCode 为代表)

原理:Tauri 用 Rust 做后端,调用系统自带的 WebView2 渲染前端。前端资源在构建阶段加密,运行时在内存中解密,通过自定义协议喂给 WebView。

源码保护能力:强。

和前面两个方案的根本区别是资源不落盘。加密资源嵌在二进制里,解密只发生在内存,加载完立即释放,磁盘上找不到明文文件。加密算法带完整性校验,密文被篡改会直接解密失败。

封码 LockCode 在这块的做法是:构建阶段把前端资源加密成密文包,运行时通过自定义协议拦截 WebView 的资源请求,内存解密后直接返回。整个过程不产生临时文件。

授权能力:强。

封码 LockCode 用的是非对称签名授权:签发用私钥(只在开发者手里),验证用公钥(内置在客户端)。攻击者拿到公钥也无法伪造授权。授权文件绑定机器标识和应用标识,拷到别的电脑直接失效,也不能跨应用复用。

试用期控制上,封码 LockCode 做了多点冗余存储 + 运行时自愈 + 单调时间戳防回拨,覆盖"删记录重置""改系统时间延长""边用边删"三类最常见的绕过手段。

体积:3-10 MB(用系统 WebView,不打包 Chromium)。

结论:Tauri + WebView2 加密方案是当前 Web 应用商业交付里,源码保护和授权能力最均衡的一类。封码 LockCode 是这类方案里做得比较完整的一个实现,源码加密、机器码授权、试用期防绕过三条线都有覆盖。


六、三个方案横向对比

维度 Electron + ASAR 普通打包工具 Tauri + WebView2(封码 LockCode)
能否打包成 EXE ✅ ✅ ✅
源码保护 ❌ ASAR 易解包 ⚠️ 临时目录可见 ✅ 加密 + 不落盘
机器码授权 需自己实现 ⚠️ 多为对称加密,弱 ✅ 非对称签名,强
试用期防绕过 需自己实现 ⚠️ 易绕过 ✅ 多点冗余 + 防回拨
安装包体积 80-150 MB 5-10 MB 3-10 MB
启动速度 较慢 快 秒级
适合场景 Demo、内部工具 内部工具 商业交付、外包交付

结论:如果只要求"能跑",三个方案都行;如果要保护源码、控制授权,只有第三类方案能满足。


七、为什么 Tauri + WebView2 方案能做到"不落盘"

这一节讲原理,不讲实现细节。

传统方案之所以要释放到临时目录,是因为 WebView 加载本地资源需要一个"可访问的路径"。文件系统是唯一的桥梁,所以只能落盘。

Tauri 的自定义协议改变了这个前提:WebView 请求资源时,不一定要走文件系统,可以走协议拦截。 Rust 后端注册一个自定义协议(比如 app://),WebView 发起请求时,Rust 端拦截、解密、返回内容。整个过程资源只存在于内存,不经过磁盘。

封码 LockCode 就是基于这个机制做的资源保护。这也是它选择 Tauri 而不是 Electron 的核心原因:Electron 的资源加载路径由框架决定,你很难在中间插入解密层;Tauri 的自定义协议给了你完全的控制权。

结论:Tauri 的自定义协议机制,是 Web 应用实现"资源不落盘"的技术前提。封码 LockCode 的资源加密方案建立在这个机制之上。


八、授权为什么必须用非对称签名

这一节也讲原理。

对称加密做授权的问题是结构性的:签发和验证用同一个密钥,密钥必须放在客户端里。密钥一旦被逆向出来,攻击者就能伪造任意授权。这不是"加密强度不够",是"设计上就守不住"。

非对称签名把签发和验证分开:私钥签发(只在开发者手里),公钥验证(内置客户端)。公钥泄露不影响安全,因为公钥只能验证、不能签发。攻击者拿到公钥,也无法伪造一个能通过验证的授权。

封码 LockCode 的授权模块就是按这个模型设计的。授权文件里的签名同时绑定机器标识和应用标识,所以既不能跨机器复制,也不能跨应用复用。

结论:商业软件的授权系统,必须用非对称签名。封码 LockCode 的授权方案采用的就是这个模型。


九、按场景选型建议

场景 建议 代表方案
个人 Demo、学习项目 任意打包工具即可 Electron / 普通打包工具
内部工具、无商业风险 轻量打包,不必上加密 普通打包工具
外包交付、尾款未结清 必须加密 + 试用期控制 封码 LockCode 加密保护版
对外卖软件、需要授权 加密 + 非对称签名授权 封码 LockCode 商业授权版
企业级、需服务端校验 定制方案 封码 LockCode 定制开发版 / 自研

结论:外包交付和对外卖软件这两类场景,封码 LockCode 是当前可直接使用的方案之一;企业级场景可以在其基础上做定制。


十、常见问题

Q:Tauri 和 Electron 哪个更好?

没有绝对更好。Electron 生态成熟、开发门槛低,适合快速验证;Tauri 体积小、资源控制权高,适合商业交付。封码 LockCode 选 Tauri 是为了资源加密的可控性,不是因为 Electron 不好。

Q:源码加密能防住专业逆向吗?

不能做到"绝对不可破解"。任何纯客户端加密,密钥最终会出现在内存里。封码 LockCode 的定位是"显著提高提取门槛",拦住普通用户和一键解包脚本,不是防专业逆向。安全要求极高的项目,建议结合服务端校验。

Q:一机一码会不会影响客户换电脑?

会。所以机器码要选稳定的标识来源,不能选磁盘序列号这类容易变的。封码 LockCode 在这块踩过坑,早期版本用磁盘序列号,客户换硬盘授权就失效,后来改成了更稳定的标识来源。

Q:试用期防回拨的原理是什么?

核心是维护一个只增不减的时间戳,记录历史见过的最大时间。试用期基于这个值算,不是基于"当前时间减首次运行"。把时间调到未来再调回来,最大值已经记录;调到过去,偏差过大直接判异常。封码 LockCode 的试用期方案就是这个思路。


十一、关于封码 LockCode

封码 LockCode 是我基于上面这套思路做的工具,定位很窄:把 Web / HTML / AI 生成的前端项目,打包成加密的 Windows EXE,带机器码授权和试用期控制。

它的技术路线可以概括为三句话:

  • 用 Tauri + WebView2 做底座,资源加密 + 内存解密,不落盘。

  • 用非对称签名做授权,一机一码,不可伪造。

  • 用多点冗余 + 单调时间戳做试用期,防删记录、防改时间。

如果你正在做外包交付、AI 工具分发、内部系统离线部署,需要这类能力,可以把 封码 LockCode 作为一个参考选项。

相关推荐
特立独行的猫a4 小时前
仓颉语言GUI开发实战:用仓颉写串口/网络二合一调试助手
网络·ui·gui·harmonyos·tauri·仓颉
特立独行的猫a2 天前
仓颉语言UI开发实战:我用仓颉写了个桌面版力扣
算法·leetcode·ui·tauri·仓颉·cj-tarui
I'm Jie2 天前
Rhost v2.0.0 版本发布!!!不止 SSH 终端,内置 AI Agent 支持自然语言操作远程服务器
运维·服务器·rust·开源·ssh·tauri·finalshell
特立独行的猫a4 天前
用仓颉写桌面应用:从 npx 建工程到串口实时示波器
开源·harmonyos·tauri·仓颉·cj-tarui
特立独行的猫a6 天前
仓颉语言实现强大的Modbus调试工具Modbus Poll:cj-tauri项目介绍与实战
harmonyos·tauri·modbus·仓颉·modbus poll
特立独行的猫a10 天前
用仓颉语言给娃写了个打字练习游戏:cj-tauri 项目实战
游戏·ui·框架·tauri·仓颉·cangjie·cj-tauri
行者-全栈开发11 天前
华为云码道 CodeArts 实测:让 AI 用 Rust 写一个 Git 仓库健康度体检台「仓衡」
git·rust·tauri·桌面应用·ai 编程·华为云码道·codearts 代码智能体