Данная работа создана чтобы показать, как работает система шифрования и дешифровки сообщений на примере Google Apps Script.
1. Подключение библиотеки и патч для случайных байт
Функция loadCrypto() динамически загружает библиотеку CryptoJS и заменяет механизм генерации случайных байт, чтобы избежать ошибки в среде Apps Script.
function loadCrypto() {
const url = 'https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js';
eval(UrlFetchApp.fetch(url).getContentText());
// Патч: заменяем WordArray.random
CryptoJS.lib.WordArray.random = function(nBytes) {
let words = [];
for (let i = 0; i < nBytes; i += 4) {
words.push((Math.random() * 0x100000000) | 0);
}
return CryptoJS.lib.WordArray.create(words, nBytes);
};
}

2. Функции шифрования и расшифровки, отправка зашифрованного письма
Мы определили две утилитные функции:
function encryptMsg(text, key) {
loadCrypto();
return CryptoJS.AES.encrypt(text, key).toString();
}
function decryptMsg(encrypted, key) {
loadCrypto();
const bytes = CryptoJS.AES.decrypt(encrypted, key);
return bytes.toString(CryptoJS.enc.Utf8);
}
В функции sendEncryptedEmail() мы формируем текст, шифруем его и отправляем через GmailApp:
function sendEncryptedEmail() {
const secretKey = 'Key4nothing22';
const recipient = 'ravil10096@gmail.com';
const subject = 'Encrypted message for you';
const message = 'Очень секретное сообщение!';
const encrypted = encryptMsg(message, secretKey);
GmailApp.sendEmail(recipient, subject, encrypted);
}

4. Полученное письмо
На почту придёт письмо с зашифрованным текстом:

5. Проверка расшифровки в логах
Функция testDecryption() демонстрирует работу дешифровки в логах:
function testDecryption() {
const secretKey = 'Key4nothing22';
const encryptedSample = 'U2FsdGVkX1+zFv8...';
const decrypted = decryptMsg(encryptedSample, secretKey);
Logger.log('Decrypted: ' + decrypted);
}

6. Web App: онлайн-дешифратор
HTML (Web_APP.html):

Серверный код (Code.gs):

7. Публикация Web App


8. Готовый интерфейс
Открыв URL Web App, вы увидите простую форму:
- Поле для зашифрованного текста
- Поле для ввода ключа
- Кнопка «Расшифровать»

Ссылка на страницу скрипта