function base64ToUint8Array(base64String) { const binaryString = atob(base64String) const byteArray = new Uint8Array(binaryString.length) for (let i = 0; i < binaryString.length; i++) { byteArray[i] = binaryString.charCodeAt(i) } return byteArray } function utf8ToUint8Array(utf8String) { return new TextEncoder().encode(utf8String) } function uint8ArrayToBase64(uint8Array) { let binaryString = "" const len = uint8Array.byteLength for (let i = 0; i < len; i++) { binaryString += String.fromCharCode(uint8Array[i]) } return btoa(binaryString) } function uint8ArrayToUtf8(uint8Array) { return new TextDecoder().decode(uint8Array) } async function decryptData(keyBase64, ivBase64, encryptedDataBase64) { const keyBuffer = await crypto.subtle.importKey( "raw", base64ToUint8Array(keyBase64), "AES-CBC", false, ["decrypt"] ) const encryptedDataBuffer = base64ToUint8Array(encryptedDataBase64) const ivBuffer = base64ToUint8Array(ivBase64) const decryptedDataBuffer = await crypto.subtle.decrypt( { name: "AES-CBC", iv: ivBuffer }, keyBuffer, encryptedDataBuffer ) const decryptedData = uint8ArrayToUtf8(new Uint8Array(decryptedDataBuffer)) return decryptedData } async function encryptData(keyBase64, ivBase64, data) { const keyBuffer = await crypto.subtle.importKey( "raw", base64ToUint8Array(keyBase64), "AES-CBC", false, ["encrypt"] ) const dataBuffer = utf8ToUint8Array(data) const ivBuffer = base64ToUint8Array(ivBase64) const encryptedDataBuffer = await crypto.subtle.encrypt( { name: "AES-CBC", iv: ivBuffer }, keyBuffer, dataBuffer ) const encryptedData = uint8ArrayToBase64(new Uint8Array(encryptedDataBuffer)) return encryptedData } const keyBase64 = "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=" const ivBase64 = btoa("abcdefghijklmnop") const data = "_0XBPWQQ_60d7f996-04e1-4e2f-b7e9-1d1139b808ea" // Encrypt the data const encryptedData = await encryptData(keyBase64, ivBase64, data) // Decrypt the data const decryptedData = await decryptData(keyBase64, ivBase64, encryptedData) // const tegwpjke = await encryptData( // "MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=", // btoa("abcdefghijklmnop"), // "_0XBPWQQ_60d7f996-04e1-4e2f-b7e9-1d1139b808ea" // ) // console.log(tegwpjke)