Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Шифроване на пароли на Sql Server 2008 с помощта на SHA1

Пароли за хеш и сол в C#

https://crackstation.net/hashing-security.htm

https://www.bentasker.co.uk/blog/security/201-why-you-should-be-asking-how-your-passwords-are-stored

Както посочих в коментарите си, хеширането на пароли е нещо, което вероятно не трябва да правите сами.

Няколко неща, които трябва да отбележите:

  • SHA1 не се препоръчва за пароли
  • Паролите трябва да бъдат осолени
  • Трябва да използвате проверена рамка на userstore, вместо да се опитвате да създадете своя собствена, тъй като вероятно ще го „направите погрешно“
  • Сигурен съм, че има много повече

Това се казва , за да изпълните конкретния си въпрос, бихте искали нещо подобно:

Users
----
userId
passwordHashed

passwordHashed съхранява хеширана версия на паролата на потребителя (паролата с обикновен текст никога не се съхранява никъде в постоянство.)

за проверка за валидна парола се прави нещо подобно:

ALTER procedure [dbo].[proc_UserLogin]
 @userid varchar(20),
  @password nvarchar(50)
  As 

  declare
  @ReturnVal              varchar(500)


SET NOCOUNT ON      

  if exists(select userid,password from LoginManager where [email protected] and password=HASHBYTES('SHA1', @password))
  set @ReturnVal='0|Logged in Successfully'
  else
  set @ReturnVal='1|Login Failed/Username does not exist'

  select @ReturnVal

За вмъкване/актуализиране на потребителски пароли трябва да се уверите, че съхранявате хешираната парола, а не паролата с обикновен текст като такава;

INSERT INTO users(userId, passwordHashed) 
VALUES (@userId, HASHBYTES('SHA1', @rawPassword)

или

UPDATE users 
SET passwordHased = HASHBYTES('SHA1', @rawPassword) 
WHERE userId = @userId

РЕДАКТИРАНЕ:

току-що разбрах, че питате как да изпълните хеша в C#, а не в SQL. Можете да извършите следното (взето от Хеширане с SHA1 Алгоритъм в C# ):

public string Hash(byte [] temp)
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        var hash = sha1.ComputeHash(temp);
        return Convert.ToBase64String(hash);
    }
}

Вашият кодов фрагмент може да бъде:

            conn.Open();
            string query = "EXEC dbo.proc_UserLogin'" + username.Text+ "', '" + this.Hash(System.Text.Encoding.UTF8.GetBytes(password.Text))+"'";
            OleDbCommand cmd = new OleDbCommand(query, conn);

Трябва също така да отбележите, че трябва да параметризирате вашите параметри към вашата съхранена процедура, вместо да ги предавате по начина, по който сте - което изглежда, че вече имате отделен въпрос относно това.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се покаже дата в британски формат в SQL Server (T-SQL)

  2. Изберете Записи между диапазон от друга таблица

  3. Риск от сблъсък на UUID, използвайки различни алгоритми

  4. SQL Server 2005 Използване на DateAdd за добавяне на ден към дата

  5. T-SQL:проверка за имейл формат