更新记录
1.0.0(2026-11-05) 下载此版本
1.0.0
- 首个版本:AES-CBC/ECB(口令自动 PBKDF2 派生 + 随机 IV)、SHA-256、HMAC-SHA256、PBKDF2、UTF-8 安全 Base64、随机串/UUID
- 内置 selfTest():6 项标准向量自检(FIPS-197/RFC4231/RFC7914),可在 App 启动时诊断
- 纯 JS 零原生依赖;node:crypto 双向 oracle 验证(21 测全绿)
平台兼容性
pk-crypto 加解密套件
AES-128/192/256(CBC/ECB + PKCS7)、SHA-256、HMAC、PBKDF2、Base64、UUID。纯 JS 零原生依赖,S 盒数学推导生成,内置标准向量自检,可与 openssl/node 后端互通。
5 分钟接入
import pkc from '@/uni_modules/pk-crypto/js_sdk/index.js';
// 口令加密(推荐):自动 PBKDF2 派生密钥 + 随机 IV,免管密钥长度规则
const e = pkc.aesEncrypt('机密数据', 'MyP@ssw0rd'); // { ok:true, data:'base64…' }
const d = pkc.aesDecrypt(e.data, 'MyP@ssw0rd'); // { ok:true, data:'机密数据' }
// 摘要与签名
pkc.sha256('hello'); // '2cf24d…'
pkc.hmacSha256('secret-key', 'body'); // 接口签名
// 密钥派生(注册/登录场景)
pkc.deriveKey('password', 'site-salt', { iterations: 1500, len: 32 });
// 随机与 Base64
pkc.randomHex(16); pkc.randomString(12); pkc.uuid();
pkc.base64Encode('中文安全'); pkc.base64Decode('…');
// 启动自检(标准向量)
const st = pkc.selfTest(); // { ok:true, checks:[…] }
API 全表
| 方法 | 签名 | 说明 |
|---|---|---|
sha256 |
sha256(text) |
SHA-256 → hex(UTF-8 安全,长文本无长度限制) |
hmacSha256 |
hmacSha256(key, text) |
HMAC-SHA256 → hex(接口签名) |
deriveKey |
deriveKey(password, salt, { iterations?, len? }) |
PBKDF2-HMAC-SHA256 → { ok, key(hex) };默认 1000 轮/32 字节 |
aesEncrypt |
aesEncrypt(text, key, opts?) |
AES 加密 → { ok, data(base64), ivUsed, randomIv }。见 opts |
aesDecrypt |
aesDecrypt(encoded, key, opts?) |
解密 → { ok, data };错密钥/损坏密文返回 E-CR-05 不抛异常 |
randomHex |
randomHex(nBytes) |
n 字节随机 → 2n 位 hex |
randomString |
randomString(len) |
随机字符串(剔除易混淆字符 0O1lI) |
uuid |
uuid() |
RFC4122 v4 |
base64Encode |
base64Encode(text) |
UTF-8 安全 Base64 |
base64Decode |
base64Decode(text) |
解码 → 字符串(UTF-8 安全) |
selfTest |
selfTest() |
6 项标准向量自检(FIPS-197/RFC4231/RFC7914/Base64/UUID) |
aesEncrypt / aesDecrypt opts
| 参数 | 默认 | 说明 |
|---|---|---|
| mode | 'CBC' |
'CBC' / 'ECB' |
| iv | 随机 | 32 位 hex;加密时未传则随机生成并拼在密文头部(解密自动拆) |
| out | 'base64' |
'base64' / 'hex' |
| keyIsDerived | 自动 | key 是 32/48/64 位 hex 时按原始密钥;否则视为口令走 PBKDF2 派生 |
| salt | 'pk-crypto.v1' |
派生盐(前后端一致才能解密) |
| iterations | 1000 | 派生轮数 |
与后端互通(node 示例)
// node 端解密 pk-crypto 的密文(演示工程内附 mock 脚本)
const crypto = require('crypto');
const key = crypto.pbkdf2Sync('MyP@ssw0rd', 'pk-crypto.v1', 1000, 32, 'sha256');
const buf = Buffer.from(base64, 'base64');
const d = crypto.createDecipheriv('aes-256-cbc', key, buf.subarray(0, 16));
const plain = Buffer.concat([d.update(buf.subarray(16)), d.final()]).toString('utf8');
错误码
| 码 | 含义 |
|---|---|
| E-CR-01 | 输入类型不支持 |
| E-CR-02 | hex 非法 |
| E-CR-03 | S-box 内部自检失败(理论不出现,出现请反馈) |
| E-CR-04 | 密钥长度非法 |
| E-CR-05 | 密文/PKCS7 填充非法(多为密钥错误) |
| E-CR-06 | CBC 缺 IV |
| E-CR-10/11 | 加/解密异常(错误码可用于排查) |
FAQ
Q: 安全性如何保证? 实现对照 FIPS-197 / SP800-38A / RFC4231 / RFC7914 标准向量,并用 node:crypto 双向互解验证(21 项单测)。ECB 模式仅供兼容,敏感数据请用默认 CBC。
Q: 前端加密有意义吗? 本地敏感数据落盘加密(配合 pk-storage)、接口签名防篡改是真实场景;防中间人请上 HTTPS。
Q: 速度如何? 100 万字符 SHA-256 约 200ms(中端机);AES 适合 KB 级业务数据,勿加密整个文件。

收藏人数:
下载插件并导入HBuilderX
下载插件ZIP
赞赏(0)
下载 3
赞赏 0
下载 12744577
赞赏 1959
赞赏
京公网安备:11010802035340号