Hướng dẫn mã hóa dữ liệu với ASP.NET

Trong bài viết hôm nay, Hanoi-Aptech xin giới thiệu những phương pháp mã hóa dữ liệu cơ bản trong ASP.NET.

Song song với tốc độ phát triển và phổ cập của hệ thống Thương Mại Điện Tử, vấn đề bảo mật thông tin trực tuyến ngày càng được chú trọng và đầu tư. Khả năng bảo mật càng cao, nhà cung cấp càng có cơ hội gia tăng doanh số nhờ lấy được lòng tin của người dùng.

Mã hóa dữ liệu đang là kỹ thuật bảo mật được các website TMĐT sử dụng phổ biến nhất hiện nay. Trong bài viết hôm nay, Hanoi-Aptech xin giới thiệu những phương pháp mã hóa dữ liệu cơ bản trong ASP.NET.

1. Mã hóa mật khẩu một chiều

Hướng dẫn mã hóa dữ liệu với ASP.NETCó thể nói, giải pháp mã hóa mật khẩu đã được sử dụng phổ biến từ rất lâu bởi tính hiệu quả và an toàn của nó. Với giải pháp này, hệ thống sẽ mã hóa mật khẩu của người dùng, sau đó lưu trữ đoạn dữ liệu này vào CSDL.

Mật khẩu được mã hóa thành một chuỗi ký tự và không thể bị phá vỡ bằng phương pháp dịch ngược  (hoặc thời gian để “dịch ngược” với phương pháp brute-force lại là rất lâu, tương đương hàng chục năm tùy theo tốc độ máy tính và thuật toán của hacker). Ưu điểm của hình thức mã hóa này là sự linh hoạt khi bị tấn công trực tiếp vào CSDL. Lúc này, Hacker gần như không thể biết chính xác mật khẩu của khách hàng, từ có nguy cơ giả mạo tiến hành thanh toán trực tuyến hay đánh cắp thông tin người dùng được hạn chế tối đa.

Để xác định mật khẩu của người dùng mỗi khi đăng nhập, hệ thống sẽ mã hóa mật khẩu được nhập. Sau đó so sánh với chuỗi mật khẫu đã được lưu trữ trong CSDL nhằm đảm bảo an toàn.

Microsoft hiện đang cung cấp hai giải thuật mã hóa một chiều khá phổ biến là MD5 và SHA1 trong ASP.NET. Để mã hóa với MD5 và SHA1 bạn cần sử dụng lớp FormsAuthentication trong thư viện System.Web.Security.

Cú pháp: 

String result = FormsAuthentication.HashPasswordForStoringInConfigFile(param1, param2);
Trong đó: 
+ param1: Là chuỗi mật khẩu cần mã hóa.
+ param2: Là giải thuật mã hóa (MD5 hoặc SHA1)

 2.  Giải pháp mã hóa với thuật toán bất đối xứng – RSA

Hướng dẫn mã hóa dữ liệu với ASP.NETTên của thuật toán RSA sử dụng 3 chữ cái đầu tiên của bộ 3 tác giả: Ron Rivest, Adi Shamir và Len Adleman. Thuật toán này đã được mô tả lần đầu tiên tại Học viện Công nghệ Massachusetts (MIT) vào năm 1977.

RSA được biết đến là thuật toán mã hóa bất đối xứng khá phổ biến. RSA sử dụng hai cặp khóa: public key (khóa công khai) và private key (khóa riêng ) để mã hóa và giải mã dữ liệu. Khóa công khai được cung cấp cho mọi người để mã hóa dữ liệu. Dữ liệu được mã hóa bằng khóa công khai sẽ chỉ giải mã được thông qua khóa riêng tương ứng.

Để sử dụng thuật toán RSA trong ASP.NET, bạn cần sử dụng lớp thư viện: System.Security.Cryptography

Cú pháp sinh cặp khóa public key và private key:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
String txtPublicKey = rsa.ToXmlString(false);
String txtPrivateKey = rsa.ToXmlString(true);

Cú pháp mã hóa: 

public static string Encrypt(string data, string _publicKey)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        //NẠP PUBLIC KEY
        rsa.FromXmlString(_publicKey);
        byte[] dataToEncrypt = _encoder.GetBytes(data);
        //MÃ HÓA
        byte[] encryptedByteArray = rsa.Encrypt(dataToEncrypt, false);
        long length = encryptedByteArray.LongLength;
        long item = 0;
        StringBuilder sb = new StringBuilder();
        foreach (byte x in encryptedByteArray)
        {
            item++;
            sb.Append(x);

            if (item < length)
                sb.Append(",");
        }

        return sb.ToString();
    }

 Cú pháp giải mã:

public static string Decrypt(string data, string _privateKey)
    {
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        string [] dataArray = data.Split(new char[] { ',' });
        byte[] dataByte = new byte[dataArray.Length];
        for (int i = 0; i < dataArray.Length; i++)
        {
            dataByte[i] = Convert.ToByte(dataArray[i]);
        }
        //NẠP PRIVATE KEY
        rsa.FromXmlString(_privateKey);
        //GIẢI MÃ
        byte[] decryptedByte = rsa.Decrypt(dataByte, false);
        return _encoder.GetString(decryptedByte);
    }

Chúc các bạn thành công với hướng dẫn mã hóa dữ liệu với ASP.NET!

Tải mã nguồn tại đây.
Mật khẩu giải nén: aptech.vn

Dương Linh