класс шифрования и дешифрования? - PullRequest
1 голос
/ 04 января 2011

Q:

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

один из классов, которые я нашел раньше:

public static string Encrypt(string text) {

        try
        {
            key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            Byte[] byteArray = Encoding.UTF8.GetBytes(text);
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream,des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
            cryptoStream.Write(byteArray, 0, byteArray.Length);
            cryptoStream.FlushFinalBlock();
            return Convert.ToBase64String(memoryStream.ToArray());
        }

        catch (Exception ex)
        {
          string message =  ex.Message;
        }

        return string.Empty;
    }



    public static string Decrypt(string text)
    {
        try
        {
            key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();

            Byte[] byteArray = Convert.FromBase64String(text);
            MemoryStream memoryStream = new MemoryStream();
            CryptoStream cryptoStream = new CryptoStream(memoryStream,
            des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
            cryptoStream.Write(byteArray, 0, byteArray.Length);
            cryptoStream.FlushFinalBlock();
            return Encoding.UTF8.GetString(memoryStream.ToArray());
        }

        catch (Exception ex)
        {
            string message = ex.Message;


        }` 

некоторые комментарии об этом классе:

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

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

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Этот код нигде не достаточно хорош для паролей.

Позвольте мне процитировать слова Джеффа из статьи Coding Horror, на которую вы ссылались:

Вы не должны когда-либо хранить пароли пользователей.Если вы это сделаете, вы храните пароли неправильно.Всегда храните соленый хеш пароля - никогда сам пароль!Это так просто, что даже члены Mensa er .. не могут .. понять это.

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

1 голос
/ 04 января 2011

Вы можете взглянуть на пространство имен System.Security.Cryptography. Платформа .NET предлагает множество вариантов.

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

...