Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Enkripsi kata sandi di Sql Server 2008 menggunakan SHA1

Sandi hash dan salt di 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

Seperti yang saya nyatakan dalam komentar saya, hashing kata sandi adalah sesuatu yang mungkin tidak boleh Anda lakukan sendiri.

Beberapa hal yang perlu diperhatikan:

  • SHA1 tidak disarankan untuk sandi
  • Kata sandi harus diasinkan
  • Anda harus menggunakan kerangka kerja toko pengguna terverifikasi daripada mencoba membuatnya sendiri, karena kemungkinan besar Anda akan "melakukannya dengan salah"
  • Saya yakin masih banyak lagi

Itu yang dikatakan , untuk menyelesaikan pertanyaan spesifik Anda, Anda akan menginginkan sesuatu seperti ini:

Users
----
userId
passwordHashed

passwordHashed menyimpan versi hash dari kata sandi pengguna (kata sandi teks biasa tidak pernah disimpan di mana pun dalam kegigihan.)

untuk memeriksa kata sandi yang valid, sesuatu seperti ini dilakukan:

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

Untuk memasukkan/memperbarui kata sandi pengguna, Anda perlu memastikan untuk menyimpan kata sandi hash bukan kata sandi teks biasa, seperti;

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

atau

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

EDIT:

baru sadar Anda bertanya bagaimana menyelesaikan hash di C #, bukan SQL. Anda dapat melakukan hal berikut (diambil dari Hashing dengan SHA1 Algoritma dalam C# ):

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

Cuplikan kode Anda dapat berupa:

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

Anda juga harus mencatat bahwa Anda harus membuat parameter parameter Anda ke prosedur tersimpan Anda daripada meneruskannya dengan cara Anda - yang sepertinya Anda sudah memiliki pertanyaan terpisah mengenai hal itu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menambahkan kolom identitas ke tabel database yang ada yang memiliki banyak baris

  2. Konversikan kueri SQL Server ke MySQL

  3. membandingkan dua string di SQL Server

  4. COUNT(DISTINCT) dalam beberapa kolom di SQL Server 2008

  5. Kembalikan Semua Filegroups untuk Database Saat Ini di SQL Server