[C#] Hướng dẫn mã hóa mật khẩu tài khoản ứng dụng đúng chuẩn Men
Xin chào các bạn, bài viết hôm nay mình hướng dẫn các bạn các thuật toán bảo mật dùng để mã hóa mật khẩu của người dùng trên ứng dụng vào database sqlserver.
[ C # ] Cách bảo mật mã hóa mật khẩu thông tin tài khoản người dùng chuẩn Men
Lúc trước tất cả chúng ta thường mã hóa mật khẩu là dùng những thuật toán mã hóa 1 chiều ( không giải thuật ngược lại ) như : MD5, SHA1 …
Tuy nhiên, với máy tính ngày càng hiện tại và vận tốc giải quyết và xử lý ngày càng nhanh .
Các hacker có thể sử dụng các cách để hack mật khẩu của bạn như: dùng từ điển,…
Tại sao mã hóa bằng MD5 không còn an toàn?
MD5 là một thuật toán băm (hashing algorithm) được sử dụng để tạo ra một giá trị băm (hash value) duy nhất từ một đầu vào (input) bất kỳ.
MD5 đã được sử dụng thoáng đãng trong quá khứ để bảo mật thông tin những thông tin như mật khẩu và chữ ký điện tử .
Tuy nhiên, thời nay, MD5 không còn được coi là bảo đảm an toàn cho việc mã hóa những thông tin nhạy cảm. Có hai nguyên do chính cho sự không bảo đảm an toàn của MD5 :
- Tiến trình va chạm ( collision attacks ) : MD5 đã bị phá vỡ bởi những nhà nghiên cứu bằng cách tìm ra hai nguồn vào khác nhau nhưng cho cùng một giá trị băm. Việc này được cho phép kẻ tiến công tạo ra một tệp tin trá hình hoặc một thông điệp trá hình mà có cùng giá trị băm với tệp tin hoặc thông điệp gốc .
- Khả năng Dự kiến ( predictability ) : MD5 thuận tiện bị tiến công bởi những kẻ tiến công mưu trí để Dự kiến giá trị băm tiếp theo được tạo ra từ những nguồn vào. Điều này có nghĩa là kẻ tiến công hoàn toàn có thể tạo ra những đầu vào mới với cùng giá trị băm với những nguồn vào cũ đã biết, giúp họ thuận tiện thao túng thông tin và thực thi những cuộc tiến công trá hình .
Vì những lỗ hổng bảo mật thông tin trên, nên sử dụng những thuật toán băm khác như SHA-256 hay SHA-3 để bảo vệ bảo đảm an toàn cho những thông tin nhạy cảm .
Hiện nay, có một số ít thuật toán được sử dụng thoáng rộng để mã hóa mật khẩu và được coi là tốt nhất :
- Argon2 : Là một thuật toán băm mật khẩu mới nhất được tăng trưởng để chống lại những cuộc tiến công từ điển và bảo vệ những mật khẩu với những kỹ thuật tiến công mới nhất. Argon2 cũng đặc biệt hiệu quả trong việc chống lại những cuộc tiến công dựa trên GPU và ASIC .
bcrypt: Là một thuật toán băm mật khẩu lâu đời được sử dụng rộng rãi và vẫn được coi là rất an toàn. bcrypt sử dụng một phương thức gọi là “salt” để tăng tính bảo mật cho mật khẩu.
- scrypt : Là một thuật toán băm mật khẩu can đảm và mạnh mẽ khác, được sử dụng thoáng đãng trong những ứng dụng Bitcoin và những ứng dụng khác có tương quan đến tiền điện tử. Nó cũng sử dụng ” salt ” và hoàn toàn có thể được thông số kỹ thuật để tăng độ phức tạp của việc băm mật khẩu .
Các thuật toán này đều có đặc tính tăng tính bảo mật thông tin bằng cách sử dụng những kỹ thuật salt và hash can đảm và mạnh mẽ, đồng thời chống lại những cuộc tiến công từ điển và bảo vệ những mật khẩu với những kỹ thuật tiến công mới nhất. Tuy nhiên, cần quan tâm rằng một mật khẩu mạnh và phức tạp là yếu tố quan trọng nhất để bảo vệ thông tin tài khoản của bạn, bất kể thuật toán nào được sử dụng để mã hóa mật khẩu .
Ở bài viết này, mình sẽ demo ứng dụng mã hóa bằng Bcrypt trên winform C # và tàng trữ vào database .
Các bước triển khai những bạn hoàn toàn có thể tìm hiểu thêm video bên dưới :Các bước thực thi :
Đầu tiên, những bạn tạo bảng trong SQLserver :create database demologin use demologin CREATE TABLE users ( id INT PRIMARY KEY IDENTITY, username NVARCHAR(50) NOT NULL, password NVARCHAR(100) NOT NULL, ); select * from users
- Tiếp đến, chúng ta sẽ tạo 1 project C#, winform:
- Chúng ta, sẽ import thư viện Bcrypt vào từ Nuget như video ở trên.
Full source code C # :
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DemoLoginForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btnCreateUser_Click(object sender, EventArgs e) { // Get the user input values string username = txtUserName.Text; string password = txtPassword.Text; // Generate a salt for bcrypt encryption string salt = BCrypt.Net.BCrypt.GenerateSalt(); // Hash the password with bcrypt string hash = BCrypt.Net.BCrypt.HashPassword(password, salt); // Connect to the database string connectionString = "Server=NGUYENTHAO;Database=demologin;Trusted_Connection=True;"; using (SqlConnection connection = new SqlConnection(connectionString)) { // Open the database connection connection.Open(); // Insert the new user into the database SqlCommand command = new SqlCommand("INSERT INTO users (username, password) VALUES (@username, @password)", connection); command.Parameters.AddWithValue("@username", username); command.Parameters.AddWithValue("@password", hash); command.ExecuteNonQuery(); // Close the database connection connection.Close(); } } private void btnCheckLogin_Click(object sender, EventArgs e) { // Get the user input values string username = txtUserName.Text; string password = txtPassword.Text; // Connect to the database string connectionString = "Server=NGUYENTHAO;Database=demologin;Trusted_Connection=True;"; using (SqlConnection connection = new SqlConnection(connectionString)) { // Open the database connection connection.Open(); // Check if the user exists in the database SqlCommand command = new SqlCommand("SELECT password FROM users WHERE username=@username", connection); command.Parameters.AddWithValue("@username", username); SqlDataReader reader = command.ExecuteReader(); if (reader.Read()) { // Get the hashed password from the database string hashedPassword = reader.GetString(0); // Verify the input password against the hashed password using bcrypt bool passwordMatch = BCrypt.Net.BCrypt.Verify(password, hashedPassword); if (passwordMatch) { // Passwords match, user is authenticated MessageBox.Show("Login successful!"); var frm = new FrmMain(username); frm.Show(); this.Hide(); } else { // Passwords don't match, user is not authenticated MessageBox.Show("Incorrect password."); } } else { // User not found in the database MessageBox.Show("User not found."); } // Close the database connection and reader reader.Close(); connection.Close(); } } } }
Kết quả, sau khi mã hóa và tàng trữ dưới database SQLSERVER .
Thanks for watching!
Xem thêm: 7 phương pháp dạy học tiếng việt theo hướng phát triển năng lực hiệu quả – https://thomaygiat.com
DOWNLOAD SOURCE
Source: https://thomaygiat.com
Category : Kỹ Thuật Số
Chuyển vùng quốc tế MobiFone và 4 điều cần biết – MobifoneGo
Muốn chuyển vùng quốc tế đối với thuê bao MobiFone thì có những cách nào? Đừng lo lắng, bài viết này của MobiFoneGo sẽ giúp…
Cách copy dữ liệu từ ổ cứng này sang ổ cứng khác
Bạn đang vướng mắc không biết làm thế nào để hoàn toàn có thể copy dữ liệu từ ổ cứng này sang ổ cứng khác…
Hướng dẫn xử lý dữ liệu từ máy chấm công bằng Excel
Hướng dẫn xử lý dữ liệu từ máy chấm công bằng Excel Xử lý dữ liệu từ máy chấm công là việc làm vô cùng…
Cách nhanh nhất để chuyển đổi từ Android sang iPhone 11 | https://thomaygiat.com
Bạn đã mua cho mình một chiếc iPhone 11 mới lạ vừa ra mắt, hoặc có thể bạn đã vung tiền và có một chiếc…
Giải pháp bảo mật thông tin trong các hệ cơ sở dữ liệu phổ biến hiện nay
Hiện nay, với sự phát triển mạnh mẽ của công nghệ 4.0 trong đó có internet và các thiết bị công nghệ số. Với các…
4 điều bạn cần lưu ý khi sao lưu dữ liệu trên máy tính
08/10/2020những chú ý khi tiến hành sao lưu dữ liệu trên máy tính trong bài viết dưới đây của máy tính An Phát để bạn…