Хешинг - це одностороння функція (ну, картографування). Це незворотно, ви застосовуєте алгоритм захищеного хешу, і ви не можете повернути початковий рядок. Найбільше, що ви можете зробити, це генерувати те, що називається "зіткненням", тобто знайти інший рядок, який забезпечує той самий хеш. Криптографічно захищені хеш-алгоритми розроблені для запобігання виникнення зіткнень. Ви можете атакувати на захищений хеш, використовуючи таблицю веселки , протидію якій можна протидіяти, застосовуючи сіль до хешу перед його зберіганням.
Шифрування - це правильна (двостороння) функція. Це оборотно, ви можете розшифрувати нарізаний рядок, щоб отримати оригінальну рядок, якщо у вас є ключ.
Небезпечна функціональність, на яку вона посилається, полягає в тому, що якщо ви шифруєте паролі, у вашій програмі є ключ, який зберігається десь, і зловмисник, який отримує доступ до вашої бази даних (та / або коду), може отримати оригінальні паролі, отримуючи і ключ, і зашифрований текст. , тоді як з хешем це неможливо.
Зазвичай люди кажуть, що якщо зломщик володіє вашою базою даних або вашим кодом, він не потребує пароля, тому різниця полягає в суперечливості. Це наївно, тому що ви все ще зобов’язані захищати паролі своїх користувачів, головним чином тому, що більшість із них використовує один і той же пароль знову і знову, наражаючи їх на більший ризик, просочуючи їх паролі.