- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [SOFTWARE] Giới thiệu bộ phần mềm tính Kết Cấu Thép HatteSale, Mộng Đơn, Dầm, Sàn, Móng Cọc, Vách, Xà Gồ, Tính Tải Trọng
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
- [C#] Hướng dẫn viết ứng dụng chat với Gemini AI Google Winform
- Hướng dẫn khóa file bằng nhiều process id, không cho xóa tập tin
- Hướng dẫn cách tạo Product Id cho ứng dụng phần mềm XXXXX-XXXXX-XXXXX-XXXXX
- [SQLSERVER] Hướng dẫn tạo script sql từ ứng dụng Sqlserver management Studio
- [C#] Hướng dẫn sử dụng thư viện AutoITx lấy id và password Ultraviewer trên winform
- [VB.NET] Hướng dẫn lấy thông tin tài khoản đăng nhập windows và khởi động lại ứng dụng ở chế độ Administrator
- [C#] Sử dụng thư viện Polly gửi lại request api khi request bị lỗi hay rớt mạng
- [DEVEXPRESS] Chia sẻ source code tạo báo cáo report in tem nhãn label trên C# winform
- [DEVEXPRESS] Hướng dẫn vẽ biểu đồ Bar Chart trên Winform
- [C#] Tạo form đăng nhập và đăng ký với hiệu ứng Sliding Animation Effect
- [C#] Hướng dẫn tạo thanh toán đơn hàng qua mã vạch VietQR sử dụng API PayOS hoàn toàn miễn phí
- [C#] Hướng dẫn ghi log ra RichTextBox giống Console trên Winform sử dụng thư viện Serilog
- [C#] Hướng dẫn cách tạo mã QR Code trên file Excel
Viết chương trình Captcha để bảo mật ứng dụng bằng Csharp
Hướng dẫn viết Captcha để phòng chống tấn công tự động đăng nhập, để bảo mật hệ thống. Bài viết này mình xin hướng dẫn các bạn các bước tạo Captcha trong Csharp.
- Bước 1: Dùng hàm Random tạo ra một số ngẫu nhiên.
- Bước 2: Ta sử dụng thuật toán mã hóa MD5 số ngẫu nhiên, để thành một chuỗi gồm số và chữ
- Bước 3: Ta cắt chuỗi mã hóa MD5, ở ví dụ này mình sử dụng 6 ký tự để tạo Captcha
- Bước 4: Dùng thư viện Drawing để chuyển chuỗi ngẫu nhiên thành hình ảnh.
- Bước 5: Tạo thêm hiệu ứng cho hình ảnh, nhằm chống các chương trình đọc được Captcha (Ví dụ: như bài Convert Hình ảnh sang text).
Dưới đây là demo của chương trình:
Bây giờ ta bắt đầu thực hiên code ứng dụng:
- Đầu tiên ta cần import thư viện để mã hóa số ngẫu nhiên thành MD5.
using System.Security.Cryptography;
- Khai báo biến global chuỗi Captcha
private string captchaText;
- Viết hàm tạo chuỗi Captcha ngẫu nhiên
public String randomString()
{
Random rnd = new Random();
int number = rnd.Next(10000, 99999);
string text = md5(number.ToString());
text = text.ToUpper();
text = text.Substring(0, 6);
return text;
}
- Viết hàm mã hóa MD5
public static byte[] encryptData(String data)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] hashedBytes;
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
hashedBytes = md5Hasher.ComputeHash(encoder.GetBytes(data));
return hashedBytes;
}
public static string md5(String data)
{
return BitConverter.ToString(encryptData(data)).Replace("-","").ToLower();
}
- Bước tiếp ta viết hàm chuỗi chuỗi thành hình ảnh và tạo hiệu ứng cho hình ảnh xong gán vào Panel
private Bitmap drawImage(string txt, int w, int h)
{
Bitmap bt = new Bitmap(w, h);
Graphics g = Graphics.FromImage(bt);
SolidBrush sb = new SolidBrush(Color.White);
g.FillRectangle(sb, 0, 0, bt.Width, bt.Height);
System.Drawing.Font font = new System.Drawing.Font("Tahoma", 30);
sb = new SolidBrush(Color.Blue);
g.DrawString(txt, font, sb, bt.Width/2 - (txt.Length/2)*font.Size, (bt.Height/2)-font.Size );
// Tạo hiệu ứng cho captcha
// vẽ dấu chấm
int count = 0;
Random rand = new Random();
while(count<1000)
{
sb = new SolidBrush(Color.YellowGreen);
g.FillEllipse(sb, rand.Next(0, bt.Width), rand.Next(0, bt.Height), 4, 2);
count++;
}
count = 0;
// vẽ đường gạch ngang
while (count < 25)
{
g.DrawLine(new Pen(Color.Pink), rand.Next(0, bt.Width), rand.Next(0, bt.Height), rand.Next(0, bt.Width), rand.Next(0, bt.Height));
count++;
}
// End tạo hiệu ứng
return bt;
}
- Viết hàm cho nút Reset tạo mã Captcha mới
private void Reset()
{
captchaText = this.randomString();
textBox1.Text = "";
// vẽ captcha lên panel 1
panel1.BackgroundImage = drawImage(captchaText, panel1.Width, panel1.Height);
}
- Viết sự kiện cho form load
private void Form1_Load(object sender, EventArgs e)
{
Reset();
}
- Viết sự kiện cho nút kiểm tra chuỗi nhập vào có đúng với mã Captcha mình vừa tạo không
private void button3_Click(object sender, EventArgs e)
{
if (textBox1.Text == captchaText)
{
MessageBox.Show("Bạn đã nhập chính xác!");
}
else
{
MessageBox.Show("Bạn đã nhập không chính xác!");
}
}
Chúc các bạn thành công! Hãy like and share để ủng hộ diễn đàn. Cám ơn các bạn