Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

Trình duyệt của bạn không được hỗ trợ

Bạn cần cập nhật trình duyệt của mình để sử dụng trang web.

Cập nhật lên Internet Explorer phiên bản mới nhất.

Làm thế nào để tính toán và so sánh các giá trị băm bằng cách sử dụng Visual Basic.NET hoặc Visual Basic 2005

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch máy của Microsoft chứ không phải do con người dịch. Microsoft cung cấp các bài viết do con người dịch và cả các bài viết do máy dịch để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng ngôn ngữ của bạn. Tuy nhiên, bài viết do máy dịch không phải lúc nào cũng hoàn hảo. Loại bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, giống như một người nước ngoài có thể mắc sai sót khi nói ngôn ngữ của bạn. Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra. Microsoft cũng thường xuyên cập nhật phần mềm dịch máy này.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này:301053
TÓM TẮT
Các System.Security.cryptography các lớp học trong Microsoft.NET Framework làm cho nó dễ dàng để tính toán một giá trị băm cho dữ liệu nguồn của bạn. Bài viết này cho thấy làm thế nào để có được một giá trị băm và làm thế nào để so sánh hai giá trị băm để kiểm tra cho dù họ là giống hệt nhau.

<A NAME="bottom" HREF="#toc">back to the top</A>

Yêu cầu

Danh sách sau vạch ra được đề nghị phần cứng, phần mềm, hạ tầng mạng, và gói dịch vụ cần thiết:
  • Microsoft Visual Studio.NET hoặc Microsoft Visual Studio 2005
back to the top

Tính toán giá trị băm

Nó rất dễ dàng để tạo và so sánh các giá trị băm bằng cách sử dụng các mật mã nguồn lực chứa trong các System.Security.cryptography không gian tên. Bởi vì tất cả các chức năng băm đưa đầu vào của loại Byte], nó có thể là cần thiết để chuyển đổi các nguồn vào một mảng byte trước khi nó băm. Để tạo một băm cho một chuỗi giá trị, hãy làm theo các bước sau:
  1. Mở phòng thu trực quan.NET hoặc Visual Studio 2005.
  2. Tạo một ứng dụng giao diện điều khiển mới trong Visual Basic.NET hoặc trong Visual Basic 2005. Visual Studio.NET và Visual Studio 2005 tạo ra một mô-đun Đối với bạn cùng với một thủ tục Main() có sản phẩm nào.
  3. Đảm bảo rằng các dự án tham chiếu các Các vấn đềSystem.Security không gian tên.
  4. Sử dụng các Nhập khẩu tuyên bố về sự Các vấn đề, System.Security, System.Security.Cryptographic, và System.Text không gian tên do đó bạn không phải vượt qua vòng loại tờ khai từ các không gian tên sau trong mã của bạn. Các báo cáo này phải là sử dụng trước để bất cứ tờ khai nào khác.
    Imports SystemImports System.SecurityImports System.Security.CryptographyImports System.Text					
  5. Khai báo một biến chuỗi để chứa dữ liệu nguồn, và hai byte mảng (không xác định kích thước) của giữ nguồn byte và bảng băm kết quả giá trị.
    Dim sSourceData As StringDim tmpSource() As ByteDim tmpHash() As Byte					
  6. Sử dụng các GetBytes() chức năng, mà là một phần của các System.Text.ASCIIEncoding.ASCII lớp học, để chuyển đổi các chuỗi mã nguồn của bạn vào một mảng của byte (yêu cầu như đầu vào để chức năng hashing).
    sSourceData = "MySourceData"'Create a byte array from source data.tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData)					
  7. Tính toán MD5 hash cho dữ liệu nguồn của bạn bằng cách gọi ComputeHash trên một thể hiện của các MD5CryptoServiceProvider lớp học. Lưu ý rằng để tính toán giá trị băm khác, bạn sẽ cần phải tạo một thể hiện khác của lớp.
    'Compute hash based on source data.tmpHash = New MD5CryptoServiceProvider().ComputeHash(tmpSource)					
  8. TmpHash byte mảng bây giờ giữ giá trị tính băm (giá trị 128-bit = 16 byte) cho dữ liệu nguồn của bạn. Nó thường là hữu ích để hiển thị hoặc lưu trữ một giá trị như thế này như là một chuỗi hệ thập lục phân, mà đoạn mã sau hoàn thành:
    Console.WriteLine(ByteArrayToString(tmpHash))Private Function ByteArrayToString(ByVal arrInput() As Byte) As String    Dim i As Integer    Dim sOutput As New StringBuilder(arrInput.Length)    For i = 0 To arrInput.Length - 1        sOutput.Append(arrInput(i).ToString("X2"))    Next    Return sOutput.ToString()End Function					
  9. Lưu và sau đó chạy mã của bạn để xem các kết quả hệ thập lục phân chuỗi giá trị nguồn.
back to the top

So sánh hai giá trị băm

Một trong những mục đích của việc tạo ra một băm từ dữ liệu nguồn là cung cấp một cách để xem nếu dữ liệu đã thay đổi theo thời gian, hoặc để so sánh hai giá trị mà không bao giờ làm việc với các giá trị thực tế. Trong cả hai trường hợp, bạn cần phải so sánh hai tính băm, đó là dễ dàng nếu họ cả hai đều được lưu trữ như hệ thập lục phân bộ dây (như trong bước cuối cùng của phần bên trên). Tuy nhiên, nó là khá tốt mà họ sẽ cả hai trong hình thức byte mảng. Sau đây Mã, mà vẫn tiếp tục từ mã tạo trong phần trước, cho thấy như thế nào để so sánh hai byte mảng.
  1. Ngay bên dưới sự sáng tạo của một chuỗi thập lục, tạo ra một giá trị băm mới dựa trên dữ liệu nguồn mới.
    sSourceData = "NotMySourceData"tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData)Dim tmpNewHash() As ByteDim bEqual As Boolean = FalsetmpNewHash = New MD5CryptoServiceProvider().ComputeHash(tmpSource)					
  2. Cách đơn giản nhất để so sánh hai byte mảng là để lặp thông qua các mảng, so sánh mỗi yếu tố cá nhân để của nó đối tác từ giá trị thứ hai. Nếu bất kỳ yếu tố này là khác nhau, hoặc nếu hai mảng không cùng kích thước, hai giá trị là không bình đẳng.
    If tmpNewHash.Length = tmpHash.Length Then    Dim i As Integer    Do While (i < tmpNewHash.Length) AndAlso (tmpNewHash(i) = tmpHash(i))        i += 1    Loop    If i = tmpNewHash.Length Then        bEqual = True    End IfEnd IfIf bEqual Then    Console.WriteLine("The two hash values are the same")Else    Console.WriteLine("The two hash values are not the same")End IfConsole.ReadLine()					
  3. Lưu và sau đó chạy dự án của bạn để xem hệ thập lục phân chuỗi tạo giá trị băm đầu tiên, và để tìm hiểu xem các hash mới là tương đương với bản gốc.
back to the top

Danh sách mã đầy đủ

Imports SystemImports System.SecurityImports System.Security.CryptographyImports System.TextModule Module1    Sub Main()        Dim sSourceData As String        Dim tmpSource() As Byte        Dim tmpHash() As Byte        sSourceData = "MySourceData"        'Create a byte array from source data.        tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData)        'Compute hash based on source data.        tmpHash = New MD5CryptoServiceProvider().ComputeHash(tmpSource)        Console.WriteLine(ByteArrayToString(tmpHash))        sSourceData = "NotMySourceData"        tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData)        Dim tmpNewHash() As Byte        Dim bEqual As Boolean = False        tmpNewHash = New MD5CryptoServiceProvider().ComputeHash(tmpSource)        If tmpNewHash.Length = tmpHash.Length Then            Dim i As Integer            Do While (i < tmpNewHash.Length) AndAlso (tmpNewHash(i) = tmpHash(i))                i += 1            Loop            If i = tmpNewHash.Length Then                bEqual = True            End If        End If        If bEqual Then            Console.WriteLine("The two hash values are the same")        Else            Console.WriteLine("The two hash values are not the same")        End If        Console.ReadLine()    End Sub    Private Function ByteArrayToString(ByVal arrInput() As Byte) As String        Dim i As Integer        Dim sOutput As New StringBuilder(arrInput.Length)        For i = 0 To arrInput.Length - 1            sOutput.Append(arrInput(i).ToString("X2"))        Next        Return sOutput.ToString()    End FunctionEnd Module				
back to the top
THAM KHẢO
Để biết thêm về cách sử dụng các tính năng mật mã của Microsoft.NET Framework, và trên mật mã học nói chung, xem dưới đây liên kết: back to the top

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 301053 - Xem lại Lần cuối: 08/26/2011 11:44:00 - Bản sửa đổi: 2.0

  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbvs2005applies kbvs2005swept kbcrypt kbsecurity kbhowtomaster kbmt KB301053 KbMtvi
Phản hồi