外观
system.cipher
约 891 字大约 3 分钟
2026-07-15
旧式高层密码接口。官网公开的 system.crypto 仍应作为新代码的首选;system.cipher 更像兼容层。
import cipher from '@system.cipher'公共回调
| 名称 | 签名 | 说明 |
|---|---|---|
success | (result) => void | 字符串结果通常为 { text: string };验签结果为布尔值或含布尔值对象 |
fail | (message: string, code: number) => void | 失败回调 |
complete | () => void | 成功或失败后执行 |
支持的 hashType:MD5、SHA1、SHA256、SHA512,默认 SHA256。
所有方法同步返回 void,结果只能从回调取得。固件错误字符串表明参数缺失、非法 action、RSA 解密失败以及 IV 越界会进入失败路径。
cipher.rsa(options)
RSA 加密或解密。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
action | String | 是 | encrypt 或 decrypt |
text | String | 是 | 输入文本;编码细节依实现 |
key | String | 是 | RSA 公钥或私钥文本 |
hashType | String | 否 | 默认 SHA256 |
success / fail / complete | Function | 否 | 通用回调 |
cipher.rsa({
action: 'encrypt',
text: 'hello',
key: publicKeyPem,
hashType: 'SHA256',
success: res => console.log(res.text),
fail: (msg, code) => console.error(code, msg)
})解密时把 action 改为 decrypt 并传入对应私钥。JIDL 只声明输入输出为字符串,没有规定 PEM/DER、Base64、字符集、RSA padding 或密文编码;这些都必须用 目标机型实机和你的密钥格式验证。不要假定它与 WebCrypto 的默认格式互通。
cipher.sign(options)
RSA 签名。参数沿用 RSA 参数结构,但实际必需的是 text、key、hashType;action 对签名没有意义。
cipher.sign({
text: 'payload',
key: privateKeyPem,
hashType: 'SHA256',
success: ({ text: signature }) => console.log(signature),
fail: (message, code) => console.error(code, message)
})固件包含 RSA-SHA1、RSA-SHA256、RSA-SHA512 字符串。签名结果的字符串编码未由 JIDL 规定,常见情况是 Base64,但文档不把它写成保证。
cipher.verify(options)
RSA 验签。
| 参数 | 类型 | 必填 |
|---|---|---|
text | String | 是 |
key | String | 是 |
signature | String | 是 |
hashType | String | 否,默认 SHA256 |
success / fail / complete | Function | 否 |
cipher.verify({
text: 'payload',
signature,
key: publicKeyPem,
hashType: 'SHA256',
success: result => {
// JIDL 只标为“object,语义为 boolean”
console.log('verify result', result)
}
})由于 JIDL 的成功参数是宽泛 object,真机上应先检查它是布尔值,还是 { result: boolean } 一类包装对象。
cipher.digest(options)
计算摘要。
cipher.digest({
hashType: 'SHA256',
text: 'hello',
success: res => console.log(res.text)
})摘要作用于 text 的内部字符串编码。要对任意二进制文件做摘要,应使用公开 system.crypto 等能明确接受 buffer 的接口。
cipher.md5(options)
MD5 快捷接口。参数为 text 和三类通用回调。
cipher.md5({
text: 'hello',
success: ({ text }) => console.log(text)
})MD5 不适合密码存储、签名或完整性安全校验,只应兼容旧协议。
cipher.aes(options)
AES 加密或解密。
| 参数 | 类型 | 必填 | 默认值/说明 |
|---|---|---|---|
action | String | 是 | encrypt / decrypt |
text | String | 是 | 输入文本 |
key | String | 是 | AES 密钥 |
iv | String | 是 | 初始化向量 |
ivOffset | Integer | 否 | 0 |
ivLen | Integer | 否 | 16;ivOffset 不能超过 IV 长度 |
success / fail / complete | Function | 否 | 通用回调 |
cipher.aes({
action: 'encrypt',
text: 'hello',
key: aesKey,
iv: aesIv,
ivOffset: 0,
ivLen: 16,
success: ({ text }) => console.log(text),
fail: (message, code) => console.error(code, message)
})ivOffset 与 ivLen 指示从 IV 字符串中使用的区段。固件明确检查 offset 不得超过 IV 长度,但没有在 JIDL 中说明 AES mode、padding、密钥/IV 编码和输出编码;跨平台协议必须先用固定测试向量验证。
选择建议
- 新应用:优先官网公开的
system.crypto; - 兼容旧协议:可用
system.cipher,但把算法、padding、编码和测试向量写入业务协议; - 不要在日志中打印私钥、AES key、IV 或明文;
SHA1、MD5仅用于被迫兼容的旧系统。
机型可用性
| Xiaomi Smart Band 10 Pro | Xiaomi Watch S4 41mm |
|---|---|
| ✅ | ✅ |