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

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 301053 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

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

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 System
    Imports System.Security
    Imports System.Security.Cryptography
    Imports 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 String
    Dim tmpSource() As Byte
    Dim 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.

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 Byte
    Dim bEqual As Boolean = False
    tmpNewHash = 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 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()
    					
  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.

Danh sách m? đ?y đ?

Imports System
Imports System.Security
Imports System.Security.Cryptography
Imports System.Text

Module 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 Function
End Module
				

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:

Thu?c tính

ID c?a bài: 301053 - L?n xem xét sau cùng: 26 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
T? khóa: 
kbvs2005applies kbvs2005swept kbcrypt kbsecurity kbhowtomaster kbmt KB301053 KbMtvi
Máy d?ch
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

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com