Алгоритм AES в C # - полностью запутался - PullRequest
0 голосов
/ 08 февраля 2012

Сначала я очистил (Google, SO, Bing) рабочий код, показывающий, как шифровать и дешифровать пароли с использованием алгоритма AES, доступного в .NET с использованием c #.Мои сомнения возникают из этих двух сообщений

  1. http://yossi -yakubov.blogspot.in / 2010/07 / aes-encryption-using-c-short-way.html

  2. http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndaelmanaged.aspx

в # 1 он показывает, что все можно сделать, используя CryptoTransform, но *Пример страницы 1019 * показывает использование сложных потоков.

  • Нужно ли мне это делать?

  • Какие преимущества у меня есть одно над другим??

  • Может ли кто-нибудь уточнить, какой код лучше всего следовать, и какие-либо предостережения в других методах.

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

1 Ответ

3 голосов
/ 08 февраля 2012

Оба подхода работают, но я бы сказал, что метод, использованный в первой из ваших ссылок, лучше всего подходит для "небольших" объемов данных, когда данные могут разумно вписываться во входные данные byte[] (например, ключи, пароли и т. Д.).).

Метод из второй ссылки лучше подходит для «больших» объемов данных, когда загрузка всего ввода в память может быть невозможна, а потоковый подход более подходит (например, шифрование файла или данных).в потоке сети).

Учитывая ваши потребности, метод из первой ссылки, вероятно, уместен.

Что касается упоминания соли в вашей последней ссылке, он используется только дляseed PasswordDeriveBytes, и не имеет прямого отношения к самому алгоритму AES.

Стоит отметить, однако, что для AES также есть своего рода «соль» в виде IV (вектора инициализации),Это просто случайные данные (которые должны каждый раз отличаться), которые могут храниться вместе с зашифрованным текстом и гарантируют, что даже при многократном шифровании одних и тех же данных выходные данные будут разными.

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

...