Em ASP, usamos a função MD5 em ASP usada pelo Fórum Rudong.com, etc. A string criptografada pela função MD5 é a seguinte:
1165d25d8cd021d5
E no Asp.Net o seguinte método:
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(senha.Texto,"MD5")
O resultado da criptografia MD5 é:
12C403B91165D25D8CD021D5F9B5BB7F
O motivo é que a função MD5 em ASP usa do 9º ao 25º bits do valor de hash MD5 de 32 bits e depois o altera para minúsculas como texto cifrado. Sabendo disso, os resultados do ASP.NET podem ser usados para comparar cadeias de senhas em bancos de dados mais antigos com um pouco de processamento.
Na função MD5 do ASP, linhas 353 e 354:
'MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
MD5=LCase(WordToHex(b) & WordToHex(c)) 'Eu recortei isso para caber na senha do banco de dados de 16 bytes:D
A primeira frase é considerar todo o texto cifrado de 32 bits, e a segunda frase é considerar o 9º ao 25º bit no meio como o texto cifrado de 16 bits.
Quando se trata de vb.net, o problema surge novamente. Em vb.net, o namespace System.Web.Security não pode ser usado e o método simples acima não pode ser usado para criptografia MD5. Então escrevi a seguinte função para lidar com isso:
VB.NET:
'Função de criptografia MD5
Função pública compartilhada MD5 (ByVal strSource como string, código ByVal como Int16) como string
'O texto original da senha codificada em ASCII é usado aqui. Se você quiser usar caracteres chineses como senha, poderá usar UnicodeEncoding, mas será incompatível com a função MD5 em ASP.
Dim dataToHash As Byte() = (Novo System.Text.ASCIIEncoding).GetBytes(strSource)
Dim hashvalue As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Dim i como inteiro
Selecione o código do caso
Caso 16 'Selecione o resultado da criptografia de caracteres de 16 bits
Para i = 4 a 11
MD5 += Hex(hashvalue(i)).ToLower
Próximo
Caso 32 'Selecione o resultado da criptografia de caracteres de 32 bits
Para i = 0 a 15
MD5 += Hex(hashvalue(i)).ToLower
Próximo
Case Else 'Quando o Código estiver errado, retorne a string inteira, ou seja, caracteres de 32 bits
Para i = 0 Para hashvalue.Length - 1
MD5 += Hex(hashvalue(i)).ToLower
Próximo
Finalizar seleção
da função final
: AndyDavis BLOG