Я делаю свою первую программу шифрования, какие-нибудь советы? - PullRequest
2 голосов
/ 02 марта 2012

Я создаю программу на C #, которая имеет пароли, и мне нужно их зашифровать. До сих пор я переворачиваю строку назад (так что привет становится olleh), а затем я использую цикл, который проходит по каждому символу, и цикл внутри него проходит по другой строке, в которой есть преобразованные буквы, чтобы увидеть, совпадают ли они. Используя это, привет = Ghh # $, так что он работает нормально. Так или иначе, есть ли дополнительные вещи, которые я могу добавить к этому? PS что такое соление и как хэширование в одну сторону?

Ответы [ 3 ]

7 голосов
/ 02 марта 2012

Первое правило криптографии - не писать свою собственную схему шифрования. Вместо этого используйте библиотеку, такую ​​как http://www.cryptlib.com/why-use-cryptlib-10-good-reasons, которая имеет привязки для C #.

Для получения дополнительной информации проверьте первый ответ на: https://security.stackexchange.com/questions/2202/lessons-learned-and-misconceptions-regarding-encryption-and-cryptology

3 голосов
/ 02 марта 2012

Соль: http://en.wikipedia.org/wiki/Salt_(cryptography) Хеширование: http://en.wikipedia.org/wiki/Cryptographic_hash_function

Упрощенный пример:

var salt = "abc123";
var encryptedPassword = HashingAlgorithm("password");
var encryptedSaltedPassword = HashingAlgorithm ("password" + salt);

Console.Writeline(encryptedPassword);
Console.Writeline(encryptedSaltedPassword);

выписывает

aIdekXieklKq309nasdf

dfk#cxk)8lkdfesijcde

Точка засолки вашегоКод для предотвращения атак по словарю.Если кто-то выяснит ваш HashingAlgorithm, он может переборщить каждое слово в словаре и выяснить, что хэши «пароля» должны быть «aIdekXieklKq309nasdf».Если вы солите свои зашифрованные слова, они должны будут знать и ваше солидное слово.

Кроме того, хорошо бы хешировать ваши пароли в базу данных вместо того, чтобы использовать какой-либо двусторонний алгоритм, таким образомлюбой (включая вас и ваших коллег), имеющий доступ к базе данных, может посмотреть и увидеть, что ваши пользователи используют в качестве паролей (поскольку многие пользователи, как правило, используют одни и те же пароли на нескольких сайтах).

3 голосов
/ 02 марта 2012

Прежде всего, разница между шифрованием и хэшированием на высоком уровне заключается в том, что зашифрованные данные могут быть расшифрованы с помощью правильного ключа, тогда как хешированные данные не могут быть извлечены, кроме как с помощью методов грубой силы, таких как прегенерация или радужные таблицы.

Хешированные пароли проверяются путем хеширования введенных пользователем данных при каждом входе в систему таким же образом, как вы это делаете при создании учетной записи, и сравнения результатов хеширования.Для любого заданного ввода результат хеширования должен быть одинаковым.

Обязательный rant:

Есть хороший аргумент в пользу того, что пароли должны всегда хешируется с использованием криптографически стойкого алгоритма.Вы можете услышать оправдание, что «мое приложение / веб-страница / и т. Д. Не так уж важно, там нет секретной информации», или «я просто учусь, так что это не важно», но факт в том, что если яможет взломать безопасность одного веб-сайта, или вы оставляете свой компьютер в системе, а я краду ваш файл паролей из вашего «образовательного» приложения, я могу взять все адреса электронной почты пользователя и фактически гарантировать, что по крайней мере некоторые из них будут использоватьтот же пароль для этой учетной записи Gmail или Yahoo.Затем я могу отправить запросы на сброс практически для любого сайта, на который их электронная почта сообщает, что у них есть учетная запись, и получить доступ к ним. Поэтому очень важно, чтобы независимо от того, какое программное обеспечение вы пишете, если оно хранит пароли, вы должны делать ответственные действия и правильно их халить + хэшировать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...