Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Mã hóa mật khẩu trên Sql Server 2008 bằng SHA1

Mật khẩu băm và muối trong 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

Như tôi đã nêu trong phần nhận xét của mình, băm mật khẩu là điều mà có lẽ bạn không nên tự làm.

Một số điều cần lưu ý:

  • SHA1 không được khuyến nghị cho mật khẩu
  • Mật khẩu nên được ướp muối
  • Bạn nên sử dụng khung userstore đã được xác minh thay vì cố gắng tạo khung của riêng bạn, vì bạn có thể sẽ "làm sai"
  • Tôi chắc rằng còn nhiều điều khác nữa

Điều đó đang được nói , để hoàn thành câu hỏi cụ thể của bạn, bạn sẽ muốn một cái gì đó như sau:

Users
----
userId
passwordHashed

passwordHashed lưu trữ phiên bản đã băm của mật khẩu của người dùng (mật khẩu văn bản thuần túy không bao giờ được lưu trữ lâu dài ở bất kỳ đâu.)

để kiểm tra mật khẩu hợp lệ, điều gì đó giống như thế này đã được thực hiện:

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

Để chèn / cập nhật mật khẩu người dùng, bạn cần đảm bảo lưu trữ mật khẩu đã băm chứ không phải mật khẩu văn bản thuần túy, chẳng hạn như vậy;

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

hoặc

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

CHỈNH SỬA:

chỉ nhận ra rằng bạn đang hỏi cách thực hiện băm trong C #, không phải SQL. Bạn có thể thực hiện những điều sau (lấy từ Hashing với SHA1 Thuật toán trong C # ):

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

Đoạn mã của bạn có thể là:

            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);

Bạn cũng nên lưu ý rằng bạn nên tham số hóa các tham số của mình cho thủ tục được lưu trữ của bạn thay vì chuyển chúng theo cách của bạn - có vẻ như bạn đã có một câu hỏi riêng về điều đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. EF4 - Thủ tục được lưu trữ đã chọn trả về không có cột nào

  2. Bảng so với Hiệu suất bảng nhiệt độ

  3. Câu lệnh trường hợp trong SQL sử dụng Like

  4. Làm cách nào để viết truy vấn SQL cho một phạm vi ngày và giờ cụ thể bằng cách sử dụng SQL Server 2008?

  5. Cách định cấu hình Microsoft® ODBC Driver 11 cho SQL Server® trên RedHat Linux với PHP