Created
August 26, 2019 17:22
-
-
Save imana97/f911f37f8f96b719c91bd05d3ca9f300 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
importScripts('crypto-js.js'); | |
/** | |
* | |
* @param binaryText file binary text | |
* @param key password to encrypt | |
* @return {string} | |
*/ | |
function _base64ToBlob(b64Data, contentType, sliceSize) { | |
contentType = contentType || ''; | |
sliceSize = sliceSize || 512; | |
let byteCharacters = atob(b64Data.split(',')[1]); | |
let byteArrays = []; | |
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { | |
let slice = byteCharacters.slice(offset, offset + sliceSize); | |
let byteNumbers = new Array(slice.length); | |
for (let i = 0; i < slice.length; i++) { | |
byteNumbers[i] = slice.charCodeAt(i); | |
} | |
let byteArray = new Uint8Array(byteNumbers); | |
byteArrays.push(byteArray); | |
} | |
let blob = new Blob(byteArrays, {type: contentType}); | |
return blob; | |
} | |
function encryptBase64(base64, key) { | |
return btoa(CryptoJS.AES.encrypt(base64, key).toString()); | |
} | |
function encryptedBase64ToBlob(encryptedBase64, key, contentType) { | |
return _base64ToBlob(CryptoJS.AES.decrypt(encryptedBase64, key).toString(CryptoJS.enc.Utf8), contentType); | |
} | |
onmessage = function (e) { | |
const data = e.data; | |
const key = data.actionKey; | |
let response; | |
switch (data.action) { | |
case 'encryptBase64': | |
response = { | |
type: 'encryptBase64', | |
result: encryptBase64(data.payload.base64, data.payload.key), | |
key | |
}; | |
break; | |
case 'encryptedBase64ToBlob': | |
response = { | |
type: 'encryptedBase64ToBlob', | |
result: encryptedBase64ToBlob(data.payload.encryptedBase64, data.payload.key, data.payload.contentType), | |
key | |
}; | |
break; | |
} | |
postMessage(response); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment