Те, що ви робите, - це не "шифрування", саме по собі; це "хеширование". Основна відмінність між ними полягає в тому, що шифрування є легко оборотним (з правильним ключем, звичайно), в той час як хешування призначене для дуже важко усунути за будь-яких обставин, крім знаючи вихідне повідомлення в першу чергу.
Теоретично хеши моделюють "випадковий оракул", гіпотетичний гомункулус з ейдетичною пам'яттю та спосіб генерування ідеально унікальних, ідеально випадкових чисел без верхньої межі діапазону. Ви дасте цьому маленькій людині повідомлення, і відбудеться одна з двох речей; або він ніколи раніше не бачив повідомлення, і в цьому випадку він генерує нове випадкове число і дає це вам як дайджест, або він бачив цю мессенсу раніше, і тому він пам’ятає і дає вам число, яке він створив, коли побачив це перший раз. У цій теоретичній моделі існує нульова залежність між повідомленням та його дайджестом, і жодне число, яке ніколи не з'являється з RNG, не існує можливості зіткнення.
На жаль, у нас немає ідеального випадкового оракула; ідея має практичні можливості для цифрової реалізації, такі як здатність оракула ефективно зберігати та ефективно пригадувати кожне повідомлення, коли-небудь у будь-якому місці, що завгодно, і здатність клієнтів приймати число, яке може становити сотні чи тисячі десяткових цифр в довжину. Натомість у нас є хеш-функції, які є незворотними (односторонніми) математичними операціями, які працюють над самим повідомленням, щоб створити детерміновану трансформацію (те саме повідомлення => той же хеш) без видимихспіввідношення між хешем та оригінальним повідомленням. Як зазначалося в коментарях, також не повинно бути передбачуваних змін хеш-значень, вироблених внесенням систематичних змін у повідомлення; в ідеалі кожен шматочок дайджесту мав би 50% шансів зміни, враховуючи зміну одного біта повідомлення.
Існує багато застосувань для хеш-функції; вони використовуються для перевірки викликів (думаю, що вхідні дані, такі як паролі), без того, щоб обидві сторони знали секрет простого тексту, і вони використовуються як контрольні суми для перевірки того, що повідомлення не було підроблене чи пошкоджене. Вони також використовуються в так званих сценаріях "доказ роботи"; обчислювальні завдання, які важко виконати, але легко перевірити.
Якщо ви коли-небудь знаходили спосіб ефективного зворотного перетворення хешу для SHA256, щоб створити повідомлення (будь-яке повідомлення), яке призведе до цього хешу, це буде підтвердженням, демонструючи, що насправді хеш принципово зламаний. Насправді, SHA256 вважається безпечним, тобто немає документально підтвердженого методу, яким би практичним не було, починати з дайджесту хешу і створювати зіткнення повідомлення, яке потребує менше роботи, ніж просто спроба будь-якої можливості (що для SHA-256 ідеально 2 ^ 256 ~ = 10 ^ 77 можливостей).