Skip to content

Instantly share code, notes, and snippets.

@imana97
Created August 26, 2019 17:22
Show Gist options
  • Save imana97/f911f37f8f96b719c91bd05d3ca9f300 to your computer and use it in GitHub Desktop.
Save imana97/f911f37f8f96b719c91bd05d3ca9f300 to your computer and use it in GitHub Desktop.
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