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.