更新记录

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 级业务数据,勿加密整个文件。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。