Bài viết này hướng dẫn cách sử dụng VBA để mã hóa chuỗi, giúp so sánh chuỗi hiệu quả và nhanh chóng. Các thuật toán được hỗ trợ bao gồm MD5, SHA1, SHA2-256, SHA2-384 và SHA2-512. Để chạy được đoạn mã, máy tính của bạn cần cài đặt .NET Framework 3.5.
Mã hóa chuỗi VBA
Chuẩn Bị Môi Trường
Trước khi bắt đầu, hãy đảm bảo .NET Framework 3.5 đã được cài đặt trên máy tính của bạn. Đây là điều kiện tiên quyết để thực thi các hàm mã hóa.
Hàm Test: Thử Nghiệm Mã Hóa
Hàm Test
dùng để kiểm tra các thuật toán mã hóa. Bạn có thể tùy chỉnh đầu vào và chọn thuật toán mong muốn.
Sub Test()
Dim sIn As String, sOut As String, b64 As Boolean
Dim sH As String, sSecret As String
sIn = "" 'Nhập chuỗi cần mã hóa
sSecret = "" 'Khóa bí mật cho StrToSHA512Salt
b64 = True 'Đầu ra dạng Base-64
'b64 = False 'Đầu ra dạng Hex
'Chọn thuật toán
'sH = MD5(sIn, b64)
'sH = SHA1(sIn, b64)
'sH = SHA256(sIn, b64)
'sH = SHA384(sIn, b64)
'sH = StrToSHA512Salt(sIn, sSecret, b64)
sH = SHA512(sIn, b64)
Debug.Print sH & vbNewLine & Len(sH) & " ký tự"
MsgBox sH & vbNewLine & Len(sH) & " ký tự"
End Sub
Hàm Test VBA
Các Hàm Mã Hóa
Dưới đây là các hàm mã hóa cụ thể, được viết bằng VBA, sử dụng .NET Framework 3.5.
MD5
Public Function MD5(ByVal sIn As String, Optional bB64 As Boolean = 0) As String
Dim oT As Object, oMD5 As Object
Dim TextToHash() As Byte
Dim bytes() As Byte
Set oT = CreateObject("System.Text.UTF8Encoding")
Set oMD5 = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
'Mã hóa
TextToHash = oT.GetBytes_4(sIn)
bytes = oMD5.ComputeHash_2((TextToHash))
'Chuyển đổi kết quả
If bB64 = True Then
MD5 = ConvToBase64String(bytes)
Else
MD5 = ConvToHexString(bytes)
End If
End Function
SHA1, SHA256, SHA384, SHA512
Các hàm SHA1, SHA256, SHA384 và SHA512 có cấu trúc tương tự MD5, chỉ khác ở đối tượng mã hóa được sử dụng. Ví dụ, với SHA256, ta sử dụng System.Security.Cryptography.SHA256Managed
.
Các hàm mã hóa SHA
StrToSHA512Salt
Hàm StrToSHA512Salt
cho phép mã hóa SHA512 với khóa bí mật, tăng cường tính bảo mật.
Function StrToSHA512Salt(sIn, sSecretKey, Optional b64 = False)
Dim asc As Object, enc As Object
Dim bytes() As Byte, SecretKey() As Byte
Set asc = CreateObject("System.Text.UTF8Encoding")
Set enc = CreateObject("System.Security.Cryptography.HMACSHA512")
bytes = asc.Getbytes_4(sIn)
SecretKey = asc.Getbytes_4(sSecretKey)
enc.Key = SecretKey
bytes = enc.ComputeHash_2((bytes))
If b64 = True Then
StrToSHA512Salt = ConvToBase64String(bytes)
Else
StrToSHA512Salt = ConvToHexString(bytes)
End If
End Function
Hàm Chuyển Đổi
Các hàm ConvToBase64String
và ConvToHexString
dùng để chuyển đổi kết quả mã hóa sang dạng chuỗi Base64 hoặc Hex.
Private Function ConvToBase64String(vIn)
Dim oD As Object
Set oD = CreateObject("MSXML2.DOMDocument")
With oD
.LoadXML "<root></root>"
.DocumentElement.DataType = "bin.base64"
.DocumentElement.nodeTypedValue = vIn
End With
ConvToBase64String = Replace(oD.DocumentElement.Text, vbLf, "")
End Function
Private Function ConvToHexString(vIn)
Dim oD As Object
Set oD = CreateObject("MSXML2.DOMDocument")
With oD
.LoadXML "<root></root>"
.DocumentElement.DataType = "bin.Hex"
.DocumentElement.nodeTypedValue = vIn
End With
ConvToHexString = Replace(oD.DocumentElement.Text, vbLf, "")
End Function
Hàm chuyển đổi
Kết Luận
Bài viết đã trình bày cách mã hóa chuỗi trong VBA sử dụng các thuật toán phổ biến. Việc mã hóa giúp so sánh chuỗi nhanh chóng và hiệu quả, đồng thời tăng cường bảo mật cho ứng dụng của bạn. Hãy lựa chọn thuật toán phù hợp với nhu cầu và tích hợp vào dự án VBA của mình.
Discussion about this post