83 lines
2.1 KiB
JavaScript
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)
|