Eu uso o seguinte código C # para calcular um hash MD5 de uma seqüência de caracteres. Funciona bem e gera uma cadeia hexadecimal de 32 caracteres como esta:
900150983cd24fb0d6963f7d28e17f72
string sSourceData;
byte[] tmpSource;
byte[] tmpHash;
sSourceData = "MySourceData";
//Create a byte array from source data.
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
// and then convert tmpHash to string...
Existe uma maneira de usar código como este para gerar uma cadeia hexadecimal de 16 caracteres (ou cadeia de 12 caracteres)? Uma string hexadecimal de 32 caracteres é boa, mas acho que será chato para o cliente digitar o código!
Respostas:
Conforme MSDN
Crie MD5:
fonte
fonte
BitConverter
não funciona da mesma maneira no Windows e Linux, consulte esta pergunta: stackoverflow.com/questions/11454004/...Estava tentando criar uma representação de string do hash MD5 usando o LINQ, no entanto, nenhuma das respostas eram soluções LINQ, portanto, adicionando isso ao smorgasbord de soluções disponíveis.
fonte
return string.Join( "", hash.ComputeHash( Encoding.UTF8.GetBytes(observedText) ).Select( x => x.ToString("x2") ) );
return string.Concat( hash.ComputeHash( Encoding.UTF8.GetBytes(observedText) ).Select( x => x.ToString("x2") ) );
. É um pouco mais curta, possivelmente uma intenção mais clara, e executa marginalmente mais rápido (<10% de aumento de desempenho).Depende inteiramente do que você está tentando alcançar. Tecnicamente, você pode apenas pegar os 12 primeiros caracteres do resultado do hash MD5, mas a especificação do MD5 é gerar um caractere de 32 caracteres.
Reduzir o tamanho do hash reduz a segurança e aumenta a chance de colisões e o sistema ser quebrado.
Talvez se você nos informar mais sobre o que está tentando alcançar, poderemos ajudar mais.
fonte
Você pode usar
Convert.ToBase64String
para converter uma saída de 16 bytes do MD5 em uma string de ~ 24 caracteres. Um pouco melhor sem reduzir a segurança. (j9JIbSY8HuT89/pwdC8jlw==
para o seu exemplo)fonte
Sequência de suporte e fluxo de arquivos.
exemplos
-
fonte
Suponho que seja melhor usar a codificação UTF-8 na string MD5.
fonte
Um hash MD5 tem 128 bits, portanto você não pode representá-lo em hexadecimal com menos de 32 caracteres ...
fonte
fonte
Uma alternativa mais rápida da resposta existente para o .NET Core 2.1 e superior:
Você pode otimizá-lo ainda mais se tiver certeza de que suas seqüências de caracteres são pequenas o suficiente e substituir a codificação.
fonte
Esta solução requer c # 8 e tira proveito
Span<T>
. Observe que você ainda precisará ligar.Replace("-", string.Empty).ToLowerInvariant()
para formatar o resultado, se necessário.fonte
fonte
https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5?view=netframework-4.7.2
fonte
Gostaria de oferecer uma alternativa que pareça executar pelo menos 10% mais rápido que a resposta de craigdfrench nos meus testes (.NET 4.7.2):
Se você preferir ter
using System.Runtime.Remoting.Metadata.W3cXsd2001;
no topo, o corpo do método pode facilitar a leitura de uma linha:Óbvio o suficiente, mas para ser completo, no contexto do OP, ele seria usado como:
fonte
Idk qualquer coisa sobre cadeias hexadecimais de 16 caracteres ....
Mas aqui está o meu para criar o hash MD5 em uma linha.
fonte