Генерация хеш-пароля MD5 в стиле Unix в C # - PullRequest
0 голосов
/ 30 ноября 2011

Я пытаюсь сгенерировать хэш пароля в стиле Unix, используя MD5.Я понимаю, что мне нужно, чтобы он выглядел как $1$<salt>$<hash>, но часть <hash> не выглядит одинаково, независимо от того, что я делаю.Вот как я генерирую хэш:

            MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(pass);
            byte[] hash = md5.ComputeHash(inputBytes);

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < hash.Length; i++)
            {
                sb.Append((char) hash[i]);
            }

            String calchash = sb.ToString();

Я почти уверен, что теперь я использую StringBuilder для создания строки из хешированных байтов.Но я не знаю, какие будут правильные настройки.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2011

Unix md5 crypt не использует обычный md5. Это было бы небезопасно, потому что обычный md5 быстр, а хэши паролей должны быть медленными.

Я нашел соответствующую статью проекта кода: http://www.codeproject.com/KB/recipes/Unix_md5crypt.aspx

0 голосов
/ 30 ноября 2011

Я думаю, что вы должны использовать hash [i] .ToString ("X") вместо простого преобразования в char. Поскольку байты хеша могут быть в любом диапазоне от 0 до 255, что не похоже на хэш md5.

0 голосов
/ 30 ноября 2011

Речь идет о форматировании. Хэш пароля Unix имеет шестнадцатеричный формат, а вы записываете его в двоичном формате. Заменить тело цикла на:

sb.Append(hash[i].ToString("x").PadLeft(2,'0'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...