То, что вы делаете, само по себе не является «шифрованием»; это "хеширование". Основное различие между ними состоит в том, что шифрование является легко обратимым (с правильным ключом, конечно), в то время как хеширование предназначено для очень трудно устранить при любых обстоятельствах, кроме зная исходное сообщение в первую очередь.
Теоретически, хэши имитируют «случайного оракула», гипотетического гомункула с эйдетической памятью и способом генерирования совершенно уникальных, совершенно случайных чисел без верхнего предела диапазона. Вы дадите этому маленькому человеку сообщение, и произойдет одно из двух; либо он никогда не видел сообщение раньше, и в этом случае он генерирует новое случайное число и дает его вам в качестве дайджеста, или он видел это сообщение раньше, и поэтому он запоминает и дает вам число, которое он сгенерировал, когда увидел его: первый раз. В этой теоретической модели нет нулевой взаимосвязи между сообщением и его дайджестом, и без единого числа, которое когда-либо дважды появлялось в ГСЧ, нет возможности для столкновения.
К сожалению, у нас нет идеального случайного оракула; Идея имеет практическую невозможность для цифровой реализации, такую как способность оракула эффективно хранить и эффективно вспоминать каждое сообщение, когда-либо хешированное кем-либо, и способность клиентов принимать число, которое может быть сотнями или тысячами десятичных цифр. в длину. Вместо этого у нас есть хеш-функции, которые являются необратимыми (односторонними) математическими операциями, которые работают с самим сообщением, чтобы создать детерминированное преобразование (то же сообщение => тот же хеш) без видимыхсвязь между хешем и исходным сообщением. Как упомянуто в комментариях, также не должно быть никаких предсказуемых изменений в значении хеш-функции, получаемых путем систематических изменений в сообщении; в идеале, каждый бит дайджеста должен иметь 50% шанс измениться, учитывая изменение одного бита сообщения.
Есть много вариантов использования хэш-функции; они используются для проверки запроса (например, учетные данные для входа в систему, например пароли), при этом обеим сторонам не нужно знать секрет открытого текста, и они используются в качестве контрольных сумм для проверки того, что сообщение не было подделано или повреждено. Они также используются в так называемых сценариях «доказательства работы»; вычислительные задачи, которые трудно выполнить, но легко проверить.
Если бы вы когда-нибудь нашли способ эффективно перевернуть хеш-дайджест SHA256, чтобы создать сообщение (любое сообщение), которое привело бы к этому хешу, это было бы доказательством демонстрации того, что на самом деле хеш по сути сломан. SHA256, на самом деле, считается безопасным, то есть не существует документированного метода, независимо от того, насколько он практичен, чтобы начать с хеш-дайджеста и создать сообщение о коллизии, которое требует меньше работы, чем простое использование каждой возможности (что для SHA-256 в идеале 2 ^ 256 ~ = 10 ^ 77 возможностей).