Если вам нужна односторонняя функция, вам не нужно шифрование.Вы хотите хеширования.Самое простое, что можно сделать - это использовать хеш, такой как SHA-256.Я рекомендую солить имя пользователя перед хэшированием.В этом случае я бы, вероятно, выбрал статическую соль, такую как edu.myschoolname:
, и поставил ее перед именем пользователя.Затем выполните это через SHA-256.Преобразуйте результат в Base-64 или в шестнадцатеричное кодирование и используйте полученную строку в качестве «имени пользователя».
Из командной строки unix это будет выглядеть следующим образом:
$ echo -n "edu.myschoolname:robnapier@myschoolname.edu" | shasum -a 256
09356cf6df6aea20717a346668a1aad986966b192ff2d54244802ecc78f964e3 -
Этот выводуникален для этой входной строки (технически это не «уникально», но вы никогда не найдете столкновения, случайно или в результате поиска).И этот вывод стабилен, так как он всегда будет одинаковым для данного ввода.(Я считаю, что PGP включает некоторую рандомизацию; если нет, то должен.)
(Относительно комментариев ниже)
Криптографические алгоритмы хеширования чрезвычайно безопасны для своих целей.Некриптографические алгоритмы хеширования небезопасны (но также и не предназначены).Я не знаю каких-либо серьезных атак на SHA-2 (включая SHA-256 и SHA-512).
Вы правы, что ваша система должна быть устойчивой против кого-то, имеющего доступ к коду.Однако, если они знают, какой ИД пользователя ищут, ни одна система не сможет противостоять им, обнаружив замаскированную версию этого идентификатора.Если вы шифруете, злоумышленник, имеющий доступ к ключу, может просто зашифровать само значение, чтобы выяснить, что это такое.
Но если вы защищаете от обратного: не позволяете злоумышленникам определить идентификатор, когда они этого не делают.Уже известно, какой идентификатор они ищут, правильное решение - криптографический хеш, в частности SHA-256 или SHA-512.Использование PGP для создания односторонней функции - это использование криптографического примитива для чего-то, для чего он не создан, и это всегда ошибка.Если вам нужна односторонняя функция, вам нужен хеш.