Files
web/test.js
2024-05-28 08:30:20 +02:00

83 lines
2.1 KiB
JavaScript

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)
}
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
}
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
}
const data = "_0XBPWQQ_e81346b1-6e8f-44bf-ad9c-33fd2dcc1abd"
const iv = btoa("abcdefghijklmnop")
const tegwpjke = await encryptData(
"JYekSRT8YXWquXpxxukJR0GsELl5Nt4KdcCbaCvSzHE=",
iv,
data
)
const decrypttionData = await decryptData(
"JYekSRT8YXWquXpxxukJR0GsELl5Nt4KdcCbaCvSzHE=",
iv,
tegwpjke
)
console.log(tegwpjke, btoa("abcdefghijklmnop"), decrypttionData === data)