Hướng dẫn dùng sha512 hash trong PHP

Trong mật mã học, MD5 (viết tắt của tiếng Anh Message-Digest algorithm 5, giải thuật Tiêu hóa tin 5) là một Bộ tạo Hash mật mã được sử dụng phổ biến với giá trị Hash dài 128-bit. MD5 đã được dùng trong nhiều ứng dụng bảo mật, và cũng được dùng phổ biến để kiểm tra tính toàn vẹn của tập tin. Một bảng băm MD5 thường được diễn tả bằng một số hệ thập lục phân 32 ký tự. Vì MD5 chỉ dò qua dữ liệu một lần, nếu hai tiền tố với cùng bảng băm được xây nên, thì cùng một hậu tố có thể cùng được thêm vào để khiến cho đụng độ dễ xảy ra. Tức là hai dữ liệu vào (input) X và Y hoàn toàn khác nhau nhưng có thể ra (output) được một md5 hash giống nhau . Tuy nhiên xác suất để xảy ra điều này là khá nhỏ. MD5 thướng được sử dụng để mã hóa password của các ứng dụng.

2. Mã hóa SHA

SHA ( Secure Hash Algorithm) là năm thuật giải được dùng để chuyển một đoạn dữ liệu nhất định thành một đoạn dữ liệu đã được mã hóa. Năm thuật giải SHA là SHA-1 (trả lại kết quả dài 160 bit), SHA-224 (trả lại kết quả dài 224 bit), SHA-256 (trả lại kết quả dài 256 bit), SHA-384 (trả lại kết quả dài 384 bit), và SHA-512 (trả lại kết quả dài 512 bit). Thuật giải SHA là thuật giải băm mật được phát triển bởi cục an ninh quốc gia Mĩ (National Security Agency hay NSA) và được xuất bản thành chuẩn của chính phủ Mĩ bởi viện công nghệ và chuẩn quốc gia Mĩ (National Institute of Standards and Technology hay NIST). Bốn thuật giải sau thường được gọi chung là SHA-2.

3. Cách sử dụng các giải thuật mã hóa MD5 và SHA trong C#

Để sử dụng các giải thuật MD5 hoặc SHA trong C# bạn có thể sử dụng namespace. using System.Security.Cryptography;

Cách sử dụng

Viết hàm mã hóa:

Mã hóa bằng giải thuật MD5

private string EncodeMD5(string pass)

{

MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();

byte[] bs = System.Text.Encoding.UTF8.GetBytes(pass);

bs = md5.ComputeHash(bs);

System.Text.StringBuilder s = new System.Text.StringBuilder();

foreach (byte b in bs)

{

s.Append(b.ToString("x1").ToLower());

}

pass = s.ToString();

return pass;

}

Mã hóa bằng giải thuật SHA

private string EncodeSHA1(string pass)

{

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider();

byte[] bs = System.Text.Encoding.UTF8.GetBytes(pass);

bs = sha1.ComputeHash(bs);

System.Text.StringBuilder s = new System.Text.StringBuilder();

foreach (byte b in bs)

{

s.Append(b.ToString("x1").ToLower());

}

pass = s.ToString();

return pass;

}

Để sử dụng các giải thuật MD5 hoặc SHA trong namespace using System.Security.Cryptography; Chúng ta phải sử dụng đối tượng SHA1CryptoServiceProvider hoặc MD5CryptoServiceProvider. Hai đối tượng này cho phép bạn có thể băm (Hash) một mảng kiểu byte thông qua hàm ComputeHash. Kết quả trả về sẽ là một mảng kiểu Byte đã được mã hóa. Việc cuối cùng của chúng ta là chuyển thành kiểu dữ liệu String để trả về.

4. Ứng dụng

Chúng ta thiết kế một demo nhỏ để minh họa cho 2 giải thuật này.

Dùng chương trình Visual Studio 2008 để thiết kế một Form có giao diện như sau:

Hình mẫu:

 

Hướng dẫn dùng sha512 hash trong PHP

 

Yêu cầu chương trình.

Sau khi nhập username và password. Nhấn nút login chương trình sẽ hiển thị một thông điệp cho thấy password đã được mã hóa thành 2 chuỗi khác nhau tương ứng với 2 giải thuật khác nhau.

Kết quả sau khi nhập password là admin:

 

Hướng dẫn dùng sha512 hash trong PHP


Hướng dẫn thực hiện:

Sau khi đã thiết kế xong giao diện nhấn F7 để coding cho form.

B1: Bổ sung namespace còn thiếu.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.IO;

using System.Windows.Forms;

using System.Security.Cryptography;

Bước 2. Viết 2 hàm mã hóa theo mẫu đã thiết kế ở trên có kết quả trả về kiểu string

Bước 3.Khai báo 2 field strUsername và strPassword để lưu trữ thông tin username và password

Bước 4. Viết code cho sự kiện Click

private void btnLogin_Click(object sender, EventArgs e)

{

strUsername =txtUsername.Text.ToString();

string strPass = txtPassword.Text.ToString().Trim(); ;

string strPasswordMD5 = EncodeMD5(strPass);

string strPasswordSHA1 = EncodeSHA1(strPass);

MessageBox.Show("Bạn đang đăng nhập với User: " + strUsername +

" và Pass đã được mã hóa MD5 là: " + strPasswordMD5 +

" và Pass đã được mã hóa SHA1 là: " + strPasswordSHA1

, "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information

);

}

Bước 4. Kết thúc.

Bài viết trên chỉ demo cơ bản 2 giải thuật. Ngoài ra các bạn có thể tìm hiểu nhiều chức năng khác trong ngôn ngữ C#, hoặc cũng có thể viết lại 2 giải thuật trên để sử dụng.