Você está offline; aguardando reconexão

Como calcular e comparar valores de hash usando Visual Basic .NET ou Visual Basic 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 301053
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 307020.

NESTA TAREFA

Sumário
As classes System.Security.Cryptography no Microsoft .NET Framework tornam mais fácil calcular um valor de hash para seus dados de origem. Este artigo mostra como obter um valor de hash e como comparar dois valores de hash para verificar se eles são idênticos.

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

Requisitos

A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que será necessário:
  • Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005
back to the top

Calcular um valor de hash

É fácil de gerar e comparar valores de hash usando os recursos de criptografia contidos no espaço para nome System.Security.Cryptography. Porque a entrada do tipo byte [] todas as funções de hash, talvez seja necessário converter a fonte em uma matriz de bytes antes de ele é hash. Para criar um hash para um valor de seqüência de caracteres, execute essas etapas:
  1. Abra Visual Studio .NET ou Visual Studio 2005.
  2. Crie um novo aplicativo de console no Visual Basic .NET ou no Visual Basic 2005. O Visual Studio .NET e Visual Studio 2005 criar um módulo para você com um procedimento Main() vazio.
  3. Certifique-se que o projeto faz referência os namespaces System.Security e sistema .
  4. Use a declaração Imports nos namespaces System.Text , System.Security.Cryptographic , System.Security e sistema para que não é necessário para qualificar declarações desses namespaces posteriormente no seu código. Essas instruções devem ser usadas antes para qualquer outra declaração.
    Imports SystemImports System.SecurityImports System.Security.CryptographyImports System.Text					
  5. Declare uma variável seqüência de caracteres para armazenar os dados de origem e matrizes de dois bytes (de tamanho indefinido) para armazenar os bytes de origem e o valor de hash resultante.
    Dim sSourceData As StringDim tmpSource() As ByteDim tmpHash() As Byte					
  6. Use a função GetBytes() , que é parte da classe System.Text.ASCIIEncoding.ASCII , para converter a seqüência de origem em uma matriz de bytes (necessário como entrada para a função hash).
    sSourceData = "MySourceData"'Create a byte array from source data.tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData)					
  7. Calcule o hash MD5 para seus dados de origem chamando ComputeHash em uma instância da classe MD5CryptoServiceProvider . Observe que para calcular a outro valor de hash, você precisa criar outra instância de class.
    'Compute hash based on source data.tmpHash = New MD5CryptoServiceProvider().ComputeHash(tmpSource)					
  8. A matriz de bytes tmpHash agora contém o valor de hash computados (valor de 128 bits = 16 bytes) para seus dados de origem. Geralmente é útil exibir ou armazenar um valor assim como uma seqüência de caracteres hexadecimal, o que o código a seguir realiza:
    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. Salve e em seguida, executar seu código para ver a seqüência hexadecimal resultante para o valor de origem.
back to the top

Comparar dois valores de hash

Um dos objetivos da criação de um hash dos dados de origem é fornecer uma maneira para ver se os dados foi alterado com o tempo ou para comparar dois valores sem nunca trabalhando com os valores reais. Em ambos os casos, você precisa comparar dois hashes calculados, que é fácil se eles são armazenados como seqüências de caracteres hexadecimais (como na última etapa da seção acima). No entanto, é bem possível que eles ambos serão na forma de matrizes de bytes. O código a seguir, que continua a partir do código criado na seção anterior, mostra como comparar matrizes de dois bytes.
  1. Logo abaixo a criação de uma seqüência de caracteres hexadecimal, criar um novo valor de hash com base nos novos dados de origem.
    sSourceData = "NotMySourceData"tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData)Dim tmpNewHash() As ByteDim bEqual As Boolean = FalsetmpNewHash = New MD5CryptoServiceProvider().ComputeHash(tmpSource)					
  2. A maneira mais simples para comparar matrizes de dois bytes é loop matrizes, comparando cada elemento individual à sua contraparte do segundo valor. Se os elementos são diferentes, ou se duas matrizes não são o mesmo tamanho, os dois valores não são iguais.
    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. Salve e em seguida, execute seu projeto para exibir a seqüência hexadecimal criada a partir do primeiro valor de hash e para descobrir se o novo hash é igual ao original.
back to the top

Concluir a listagem de código

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
Referências
Para obter mais informações sobre como usar os recursos de criptografia do Microsoft .NET Framework e criptografia em geral, consulte os seguintes links: back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 301053 - Última Revisão: 05/12/2007 02:29:48 - Revisão: 4.4

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005applies kbvs2005swept kbcrypt kbsecurity kbhowtomaster KB301053 KbMtpt
Comentários
m=document.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?"> ;