CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

Sử dụng giải thuật MD5 trong các ngôn ngữ lập trình và các hệ quản trị cơ sở dữ liệu khác nhau.

Đăng lúc: 11:23 AM - 08/12/2022 bởi Charles Chung - 3396

Trong bài viết này tôi sẽ hướng dẫn các bạn cách sử dụng giải thuật MD5 trong các ngôn ngữ lập trình như C#, Java, JavaScript, VB.NET, Python, PHP và trong một số hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, PostgreSQL, Oracle

1. MD5 là gì?

Trong mật mã học, MD5 là một hàm băm mật mã học được sử dụng phổ biến với giá trị băm dài 128-bit. Là một chuẩn Internet, 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ự.

2. Mô tả

MD5 chuyển một đoạn thông tin chiều dài thay đổi thành một kết quả chiều dài không đổi 128 bit. Mẩu tin đầu vào được chia thành từng đoạn 512 bit; mẩu tin sau đó được độn sao cho chiều dài của nó chia chẵn cho 512. Công việc độn vào như sau: đầu tiên một bit đơn, 1, được gắn vào cuối mẩu tin. Tiếp theo là một dãy các số zero sao cho chiều dài của mẩu tin lên tới 64 bit ít hơn so với bội số của 512. Những bit còn lại được lấp đầy bằng một số nguyên 64-bit đại diện cho chiều dài của mẩu tin gốc.

Thuật toán MD5 chính hoạt động trên trạng thái 128-bit, được chia thành 4 từ 32-bit, với ký hiệu A, B, C và D. Chúng được khởi tạo với những hằng số cố định. Thuật toán chính sau đó sẽ xử lý các khối tin 512-bit, mỗi khối xác định một trạng thái. Quá trình xử lý khối tin bao gồm bốn giai đoạn giống nhau, gọi là vòng; mỗi vòng gồm có 16 tác vụ giống nhau dựa trên hàm phi tuyến F, cộng mô đun, và dịch trái. Hình 1 mô tả một tác vụ trong một vòng. Có 4 khả năng cho hàm F; mỗi cái được dùng khác nhau cho mỗi vòng:

3. Sử dụng trong các ngôn ngữ

  • MD5 trong C#

        public static string GenerateMD5(string data)
    {
       //tạo mới đối tượng lưu chuỗi kết quả 
       StringBuilder hash = new StringBuilder();
       //tạo mới đối tượng mã hóa md5
       MD5CryptoServiceProvider md5provider = new MD5CryptoServiceProvider();
       //mã hóa
       byte[] bytes = md5provider.ComputeHash(new UTF8Encoding().GetBytes(data));
       //duyệt từng byte chuyển sang hệ 16
       for (int i = 0; i < bytes.Length; i++)
       {
           //chuyển về hệ hexa (16) chữ thường nếu muốn chữ hoa thì X2 nhé
           hash.Append(bytes[i].ToString("x2"));
       }
       return hash.ToString();
   }

  • MD5 trong VB.NET

Shared Function GenerateMD5(data As String) As String
        'Tạo đối tượng mã hóa MD5
        Using hasher As MD5 = MD5.Create()
            ' Mã hóa
            Dim dbytes As Byte() = hasher.ComputeHash(Encoding.UTF8.GetBytes(data))
            ' Tạo string builder chứa kết quả
            Dim sBuilder As New StringBuilder()
            ' chuyển byte thành hệ hexa 16
            For n As Integer = 0 To dbytes.Length - 1
                sBuilder.Append(dbytes(n).ToString("x2"))
            Next n
            Return sBuilder.ToString()
        End Using
    End Function

  • MD5 trong Java

     public static String GenerateMD5(String data){
        try {
            // gọi phương thức tạo đối tượng mã hóa MD5
            MessageDigest md = MessageDigest.getInstance("MD5");
            //chuyển chuỗi mã hóa về dạng byte
            byte[] messageDigest = md.digest(data.getBytes());
            //chuyển mảng byte thành ký số
            BigInteger no = new BigInteger(1, messageDigest);
            // convert thành chuỗi hexa 16
            String hashtext = no.toString(16);
            while (hashtext.length() < 32) {
                hashtext = "0" + hashtext;
            } 
            return hashtext;
        } catch (NoSuchAlgorithmException ex) {
            System.out.println("Sai tên giải thuật");
        }
        return null;
    }

  • MD5 trong JavaScript

    <!--Sử dụng thư viện md5-->

    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/core.min.js"></script>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/md5.js"></script>

    <script>

        //gọi hàm MD5 và thông báo kết quả

        alert(CryptoJS.MD5('123456'))

    </script>

  • MD5 trong Pyhton

# Code chạy trong Python 3

import hashlib

# chuỗi mã hóa

str="123456"

# gọi hàm md5 trong thư viện hashlib sử dụng hàm encode vì dữ liệu nhận dạng là utf-8

result = hashlib.md5(str.encode())

# chuyển sang hệ 16

str16=result.hexdigest()

# in kết quả

print("123456 mã hóa thành: ",str16)

  • MD5 trong PHP

 <?php

        //gọi hàm md5 có sẵn trong php để sử dụng

        echo md5('123456')

?>

4. Sử dụng trong các hệ quản trị cơ sở dữ liệu

  • MD5 trong SQL Server

//gọi hàm có sẵn trong SQL Server

select lower(CONVERT(VARCHAR(32), HashBytes('md5', '123456'), 2))

  • MD5 trong MySQL

//Gọi hàm có sẵn trong MySQL

select MD5('123456')

  • MD5 trong PostgreSQL

//Gọi hàm có sẵn trong postgreSQL

SELECT MD5('PostgreSQL MD5')

  • MD5 trong Oracle

//Gọi hàm có sẵn trong Oracle

select standard_hash('123456', 'MD5') from dual;

5. Video hướng dẫn dùng

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ