共计 1368 个字符,预计需要花费 4 分钟才能阅读完成。
在前端使用加解密方式容易暴露密钥(或许一定会),但是如果把密钥藏起来,藏到二进制中或许就不容易被发现了。
是我用来验证想法的 demo,下面介绍大概思路,以及有些踩坑的内容
一、基本情况
1、使用 wasm-pack 这个工具来创建项目,编译成 web 类型
wasm-pack new sm4-sdk
wasm-pack build --target web
2、使用了一个简单的国密库
cargo add smcrypto
经过一番研究发现它的 Padding 模式是 PKCS5Padding
3、使用 dotenv
达成编译阶段注入变量的目的
从前端的工程化的一些经验中借鉴来的,dotenv
支持从环境变量和 .env
文件读取变量,
cargo add dotenv
// file config.rs
use dotenv_codegen::dotenv;
pub const KEY: &str = dotenv!("SM4_SDK_KEY");
pub const IV: &str = dotenv!("SM4_SDK_IV");
4、如何使用
克隆这个项目,将 .env.example
修改为 .env
文件,修改里面的密钥内容,执行
wasm-pack build --target web
二、踩坑
1、安装wasm-pack
安装 wasm-pack
命令有两种方式,通过 cargo
或者npm
如果是 windows 环境,建议设置 default host 等设为msvc
// file settings.toml
default_host_triple = "x86_64-pc-windows-msvc"
default_toolchain = "stable-x86_64-pc-windows-msvc"
2、使用 github action
自动打包
希望通过 github action
的环境变量提供给项目打包时使用,可能 dotenv
没有支持好,可能是我配置不对。不过不折腾的方式是配置 repository secrets
,使用时新建一个.env
文件
// file workflows/wasm-pack.yml
- name: create env file
run: |
touch .env
echo SM4_SDK_KEY=${{secrets.SM4_SDK_KEY}} >> .env
echo SM4_SDK_IV=${{secrets.SM4_SDK_IV}} >> .env
三、如何使用
参考项目中的 example.html
的做法,这个项目并没有上传到 npm 上,
正文完