85 lines
2.3 KiB
JavaScript
85 lines
2.3 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)
|
|
}
|
|
|
|
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)
|