UUID 通用唯一标识符
UUID 通用唯一标识符(UUID)是用于在所有其他同类资源中唯一标识资源的标签。
计算机系统在本地使用非常大的随机数生成 UUID。理论上,这些 ID 可能不是全局唯一的,但重复的概率非常小。如果系统确实需要绝对唯一的 ID,则这些 ID 可能由中央机构分配。
UUID 是 128 位值,通常表示为 36 个字符的字符串,格式为 123e4567-e89b-12d3-a456-426614174000(5 个由连字符分隔的十六进制字符串)。有几个版本在计算方式上略有不同;例如,包含时间信息。
Crypto 接口的 randomUUID() 方法用于通过密码学安全的随机数生成器生成第四版 UUID。
近年来,随着互联网技术的迅猛发展,个人敏感信息的传输和存储安全问题备受关注。为了保护用户的隐私权益,我国制定了 GB/T-35273 标准,该标准旨在规范个人敏感信息的传输和存储过程,保障信息安全。
传输和存储个人敏感信息时,应采用加密等安全措施;
1)个人敏感信息应在传输过程中进行加密,以防止未授权访问和窃取。
2)同时,在存储过程中,也要采用加密等措施,确保数据的安全和隐私保护。
// 开启加密存储 wx.setStorage({ key: "key", data: "value", encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true success() { wx.getStorage({ key: "key", encrypt: true, // 若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true success(res) { console.log(res.data) } }) } })
微信小程序 API wx.setStorage(Object object) 支持是否开启加密存储。只有异步的 setStorage 接口支持开启加密存储。开启后,将会对 data 使用 AES128 加密,接口回调耗时将会增加。若开启加密存储,setStorage 和 getStorage 需要同时声明 encrypt 的值为 true。此外,由于加密后的数据会比原始数据膨胀 1.4 倍,因此开启 encrypt 的情况下,单个 key 允许存储的最大数据长度为 0.7MB,所有数据存储上限为 7.1MB
Web Crypto API
Web Crypto API 为脚本提供了一套关于密码学原语的接口,以便用于构建需要使用加密的系统。
在 JavaScript 中,您可以使用 crypto
模块的 subtle
属性来进行数据签名。下面是一个简单的示例,演示如何使用 crypto.subtle
来生成 RSA 密钥对、对数据进行签名,以及使用公钥验证签名的有效性。
生成 RSA 密钥对:
// 生成 RSA 密钥对 async function generateKeyPair() { return crypto.subtle.generateKey( { name: "RSA-PSS", modulusLength: 2048, publicExponent: new Uint8Array([0x01, 0x00, 0x01]), hash: {name: "SHA-256"}, }, true, ["sign", "verify"] ); }
对数据进行签名:
// 对数据进行签名 async function signData(data, privateKey) { const signature = await crypto.subtle.sign( { name: "RSA-PSS", saltLength: 20, }, privateKey, data ); return new Uint8Array(signature); }
使用公钥验证签名的有效性:
// 使用公钥验证签名的有效性 async function verifySignature(data, signature, publicKey) { const isValid = await crypto.subtle.verify( { name: "RSA-PSS", saltLength: 20, }, publicKey, signature, data ); return isValid; }
示例用法:
(async () => { const { privateKey, publicKey } = await generateKeyPair(); const data = new TextEncoder().encode("Hello, world!"); const signature = await signData(data, privateKey); const isValid = await verifySignature(data, signature, publicKey); console.log("Signature valid:", isValid); })();
在这个示例中,generateKeyPair
函数用于生成 RSA 密钥对,signData
函数用于对数据进行签名,verifySignature
函数用于验证签名的有效性。您可以根据您的需求修改和扩展这些函数来满足特定的加密签名需求。