Безпечне зберігання текстових даних має важливе значення, особливо якщо ці дані містять особисту, фінансову чи іншу чутливу інформацію. Тема, яку я хочу обговорити, стосується абсолютно всього: зберігання банківських даних, паролів, ключів доступу, адреси коханки тощо. Оскільки ми всі тут ведемо блоги в системі блокчейн, не важко припустити, що йдеться також про безпечне зберігання сід-фрази. На мою думку, текст нижче скасує необхідність гравіювання 12 (або 24) слів ключа на сталевій пластині.
AES (Advanced Encryption Standard) — це алгоритм симетричного шифрування, який використовується для захисту даних. В цьому я самоучка та багато років займаюся веб-розміткою і дизайном, програмуванням на PHP та трохи JavaScript. HTML — це не програмування, а розмітка. Тобто коди HTML не запускають виконувальний механізм сайту, а лише формують структуру та зовнішній вигляд. У JavaScript для роботи з AES використовуються сторонні бібліотеки, оскільки стандартні функції шифрування не вбудовані в мову.
Шифрування з AES передбачає, що одне й те ж саме секретне слово або ключ використовується як для шифрування, так і для розшифровки даних. Це робить його механізм симетричним, на відміну від асиметричних методів, де використовуються два різні ключі (публічний для шифрування і приватний для розшифровки).
Для реалізації AES у JavaScript користувач передає дані (повідомлення) і секретний ключ, а бібліотека шифрує дані, повертаючи зашифрований результат. При зворотному процесі з тим самим ключем бібліотека виконує розшифровку даних.
Приклад шифрування та дешифрування тексту з використанням AES і бібліотеки CryptoJS:
- Підключення бібліотеки. Насамперед додаємо посилання на бібліотеку у свій HTML файл:
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
- Приклад шифрування і дешифрування:
<p><strong>Розшифроване повідомлення:</strong> <span id="decryptedMessage"></span></p> <script> // Шифрування var message = "Текст для шифрування"; var secretKey = "СекретнийКлюч"; var encrypted = CryptoJS.AES.encrypt(message, secretKey).toString(); // Виводимо зашифроване повідомлення на сторінку document.getElementById('encryptedMessage').textContent = encrypted; // Розшифрування var decrypted = CryptoJS.AES.decrypt(encrypted, secretKey); var originalMessage = decrypted.toString(CryptoJS.enc.Utf8); // Виводимо розшифроване повідомлення на сторінку document.getElementById('decryptedMessage').textContent = originalMessage; </script>
Зашифрований текст виглядає приблизно так:
Цей приклад демонструє шифрування тексту. До безпеки зберігання ключа потрібно ставитися з особливою серйозністю, оскільки відновити його можна хіба що методом брутфорсу (перебору паролів). Однак пароль не обов’язково має бути суперскладним, достатньо, щоб його знали лише ви. Наприклад, я іноді використовую як пароль індекс мого району, де я виріс. Це шестизначний номер, який змінився після розпаду Союзу, але я його запам'ятав на все життя (тоді ще не було електронної пошти).
Особисто я зберігаю зашифрований текст в інтернеті, в хмарному сховищі. Приклад скрипту для розшифрування — у цій статті ;-)
Дозволяю використання інформації з цієї статті виключно на свій страх і ризик.