Данная работа создана чтобы показать, как работает система шифрования и дешифровки сообщений на примере 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, вы увидите простую форму:

  • Поле для зашифрованного текста
  • Поле для ввода ключа
  • Кнопка «Расшифровать»

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