Рейтинг:
1
Thomas Daniels
Первое важное замечание: если вы мочь вам следует избегать необходимости расшифровывать пароль. Например, если это просто сравнение пользовательского ввода с ранее сохраненным паролем, вы должны использовать не алгоритм шифрования/дешифрования, а алгоритм хэширования или алгоритм вывода ключа, чтобы кто-то не мог просто восстановить исходный пароль. Для этого загляните в bcrypt или PBKDF2.
Конечно, есть цели, где вам нужно расшифровать его - например, когда вам нужно передать его как часть веб-запроса. Для этой цели наилучший способ хранения пароля зависит от операционной системы:
Если речь идет о настольном приложении Windows, следует использовать API CryptProtectData, который хранит учетные данные в защищенных областях памяти и шифрует их с помощью ключа, являющегося частью профиля пользователя. Это стандартный механизм защиты для приложений Windows.
В Linux вы можете посмотреть, как использовать брелок GNOME или кошелек KDE, а OS X также имеет набор API для своего брелка. Это гарантирует, что параметры безопасности для связки ключей пользователя будут иметь преимущественное управление - они могут решить, как часто они хотят повторно вводить свой мастер-ключ.
Любая процедура, которую вы выберете, чтобы запутать пароли,-это упражнение в тщетности против любого наполовину определенного злоумышленника, поэтому в лучшем случае вы создаете иллюзию безопасности. Мое предложение состоит в том, чтобы включить параметр с надписью "запомнить мой пароль", но предупредить ваших пользователей, что пароль будет храниться локально в обратимом формате, который обеспечивает небольшую безопасность, чтобы они знали об этой проблеме.
Для Linux или Mac я не могу привести пример. Если вы используете Windows и хотите увидеть реализацию API CryptProtectData: у меня есть
статья[
^] частью которого является API CryptProtectData: вас заинтересует раздел статьи "EncryptDecryptData - для шифрования и дешифрования с использованием CryptProtectData".
ZurdoDev
+5 за то, что не прыгал на них, говоря им, что они никогда не должны шифровать пароли и всегда должны хэшировать.
bmw318mt
Спасибо за ваш комментарий, однако меня попросили выполнить какое-то шифрование, поэтому моя идея состояла в том, чтобы использовать Rijndael. Есть предложения?
Thomas Daniels
Хм, я не очень много знаю об этих алгоритмах, но взгляните на систему.Безопасность.Пространство имен криптографии, там есть несколько реализаций для симметричных алгоритмов.