UUID 通用唯一標(biāo)識(shí)符
共 3029字,需瀏覽 7分鐘
·
2024-08-05 08:00
UUID 通用唯一標(biāo)識(shí)符(UUID)是用于在所有其他同類資源中唯一標(biāo)識(shí)資源的標(biāo)簽。
計(jì)算機(jī)系統(tǒng)在本地使用非常大的隨機(jī)數(shù)生成 UUID。理論上,這些 ID 可能不是全局唯一的,但重復(fù)的概率非常小。如果系統(tǒng)確實(shí)需要絕對(duì)唯一的 ID,則這些 ID 可能由中央機(jī)構(gòu)分配。
UUID 是 128 位值,通常表示為 36 個(gè)字符的字符串,格式為 123e4567-e89b-12d3-a456-426614174000(5 個(gè)由連字符分隔的十六進(jìn)制字符串)。有幾個(gè)版本在計(jì)算方式上略有不同;例如,包含時(shí)間信息。
Crypto 接口的 randomUUID() 方法用于通過密碼學(xué)安全的隨機(jī)數(shù)生成器生成第四版 UUID。
近年來,隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,個(gè)人敏感信息的傳輸和存儲(chǔ)安全問題備受關(guān)注。為了保護(hù)用戶的隱私權(quán)益,我國制定了GB/T-35273標(biāo)準(zhǔn),該標(biāo)準(zhǔn)旨在規(guī)范個(gè)人敏感信息的傳輸和存儲(chǔ)過程,保障信息安全。
傳輸和存儲(chǔ)個(gè)人敏感信息時(shí),應(yīng)采用加密等安全措施;
1)個(gè)人敏感信息應(yīng)在傳輸過程中進(jìn)行加密,以防止未授權(quán)訪問和竊取。
2)同時(shí),在存儲(chǔ)過程中,也要采用加密等措施,確保數(shù)據(jù)的安全和隱私保護(hù)。
// 開啟加密存儲(chǔ)wx.setStorage({key: "key",data: "value",encrypt: true, // 若開啟加密存儲(chǔ),setStorage 和 getStorage 需要同時(shí)聲明 encrypt 的值為 truesuccess() {wx.getStorage({key: "key",encrypt: true, // 若開啟加密存儲(chǔ),setStorage 和 getStorage 需要同時(shí)聲明 encrypt 的值為 truesuccess(res) {console.log(res.data)}})}})
微信小程序 API wx.setStorage(Object object) 支持是否開啟加密存儲(chǔ)。只有異步的 setStorage 接口支持開啟加密存儲(chǔ)。開啟后,將會(huì)對(duì) data 使用 AES128 加密,接口回調(diào)耗時(shí)將會(huì)增加。若開啟加密存儲(chǔ),setStorage 和 getStorage 需要同時(shí)聲明 encrypt 的值為 true。此外,由于加密后的數(shù)據(jù)會(huì)比原始數(shù)據(jù)膨脹1.4倍,因此開啟 encrypt 的情況下,單個(gè) key 允許存儲(chǔ)的最大數(shù)據(jù)長度為 0.7MB,所有數(shù)據(jù)存儲(chǔ)上限為 7.1MB
Web Crypto API
Web Crypto API 為腳本提供了一套關(guān)于密碼學(xué)原語的接口,以便用于構(gòu)建需要使用加密的系統(tǒng)。
在 JavaScript 中,您可以使用 crypto 模塊的 subtle 屬性來進(jìn)行數(shù)據(jù)簽名。下面是一個(gè)簡(jiǎn)單的示例,演示如何使用 crypto.subtle 來生成 RSA 密鑰對(duì)、對(duì)數(shù)據(jù)進(jìn)行簽名,以及使用公鑰驗(yàn)證簽名的有效性。
// 生成 RSA 密鑰對(duì)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"]);}// 對(duì)數(shù)據(jù)進(jìn)行簽名async function signData(data, privateKey) {const signature = await crypto.subtle.sign({name: "RSA-PSS",saltLength: 20,},privateKey,data);return new Uint8Array(signature);}// 使用公鑰驗(yàn)證簽名的有效性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);})();
在這個(gè)示例中,generateKeyPair 函數(shù)用于生成 RSA 密鑰對(duì),signData 函數(shù)用于對(duì)數(shù)據(jù)進(jìn)行簽名,verifySignature 函數(shù)用于驗(yàn)證簽名的有效性。您可以根據(jù)您的需求修改和擴(kuò)展這些函數(shù)來滿足特定的加密簽名需求。
