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