![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Maxim1914 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.6.2015 Репутация: нет Всего: нет |
Доброго времени суток всем. У меня задание - создать таблицу с базой данных пользователей. Там есть графа: пароли. И при редактировании таблица или добавлении в него нового элемента, нужно, чтобы пароль шифровался (соление). Помогите реализовать эту задачу, сам уже две недели не могу сделать это. ASP net начал изучать месяц назад, а сроки выполнения задачи поджимают.
У меня есть модель Table.cs, контроллер HomeController.cs, AdminController.cs, в AdminController у меня вывод, добавление, создание и удаление элементов. В Table.cs есть переменная пароля public string password { get; set; }. В общем нужно, чтобы когда клиент добавлял новый пароль, пароль хэшировался и этот хэш можно было где то хранить и отображать в отдельном представлении |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Тут смотрел?
-------------------- ![]() |
|||
|
||||
| Maxim1914 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.6.2015 Репутация: нет Всего: нет |
Смотрел, не умею реализовывать. Вот код того, что написал, не знаю, что делать дальше:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using WebApplication11.Models; using System.Security.Cryptography; using System.Web.Security; using System.Text; namespace WebApplication11.Models { /// <summary> /// Salted password hashing with PBKDF2-SHA1. /// Author: havoc AT defuse.ca /// www: http://crackstation.net/hashing-security.htm /// Compatibility: .NET 3.0 and later. /// </summary> public class PasswordHash { public string PasswordHashCode(string passwordhash) { using (var context = new Database1Entities()) { var user = from u in context.Tables where u.Password == passwordhash select u.Password; string password = CreateHash(passwordhash); return (password); } } // The following constants may be changed without breaking existing hashes. public const int SALT_BYTE_SIZE = 24; public const int HASH_BYTE_SIZE = 24; public const int PBKDF2_ITERATIONS = 1000; public const int ITERATION_INDEX = 0; public const int SALT_INDEX = 1; public const int PBKDF2_INDEX = 2; public static string CreateHash(string password) { // Generate a random salt RNGCryptoServiceProvider csprng = new RNGCryptoServiceProvider(); byte[] salt = new byte[SALT_BYTE_SIZE]; csprng.GetBytes(salt); // Hash the password and encode the parameters byte[] hash = PBKDF2(password, salt, PBKDF2_ITERATIONS, HASH_BYTE_SIZE); return PBKDF2_ITERATIONS + ":" + Convert.ToBase64String(salt) + ":" + Convert.ToBase64String(hash); } private static bool SlowEquals(byte[] a, byte[] b) { uint diff = (uint)a.Length ^ (uint)b.Length; for (int i = 0; i < a.Length && i < b.Length; i++) diff |= (uint)(a[i] ^ b[i]); return diff == 0; } /// <summary> /// Computes the PBKDF2-SHA1 hash of a password. /// </summary> /// <param name="password">The password to hash.</param> /// <param name="salt">The salt.</param> /// <param name="iterations">The PBKDF2 iteration count.</param> /// <param name="outputBytes">The length of the hash to generate, in bytes.</param> /// <returns>A hash of the password.</returns> private static byte[] PBKDF2(string password, byte[] salt, int iterations, int outputBytes) { Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, salt); pbkdf2.IterationCount = iterations; return pbkdf2.GetBytes(outputBytes); } } } |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Мне кажется, ты не умеешь читать. http://web.securityinnovation.com/appsec-w...ords-in-ASP-NET В базе пароль хранить нельзя! В базе хранишь только хеш и соль. Когда надо аутенифицировать пользователя, выбераешь его по username или e-mail, снимаешь хеш с того пароля, который передал тебе пользователь с солью из базы и если новый хеш равен тому, что лежит в базе, то пользователь аутенифицирован. Это сообщение отредактировал(а) Cheloveck - 23.6.2015, 14:29 -------------------- ![]() |
|||
|
||||
| Maxim1914 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 23.6.2015 Репутация: нет Всего: нет |
Мне не нужна аутентификация, нужно просто хранить хэш и все. В контроллере прописал: public ActionResult Edit(int id, [Bind(Include = "ID,Name,Surname,Father_name,Mobile_phone_number,Address,Email,Login,Password,Salt")] Table table)
{ /*var u = db.Tables.Single(x => x.ID == table.ID); if (TryUpdateModel(u)) { u.Salt = PasswordHash.CreateHash(table.Password); db.SaveChanges(); return RedirectToAction("Index"); } */ var usersEdit = (from user in db.Tables where user.ID == id select user).First(); if (ModelState.IsValid) { usersEdit.Password = PasswordHash.CreateHash(table.Password); //usersEdit.Password = PasswordHash.CreateHash(usersEdit.Password); //UpdateModel(usersEdit); //db.Entry(table).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(usersEdit); Только он все правильно делает, то есть хэширует, но потом выдает ошибку. А если добавить вот это: //UpdateModel(usersEdit); то все пашет, но обратно возвращает исходный пароль без хэша. Что и как делать дальше??? Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |