Palavras-chave: Java, hash, MD5, SHA-1, SHA-256, MessageDigest
A maneira mais comum de se gerar um código hash em Java é utilizando a classe java.security.MessageDigest. O método a seguir gera o hash MD5 de uma string:
MessageDigest md = MessageDigest.getInstance("MD5"); md.update(frase.getBytes()); byte[] hashMd5 = md.digest();
O hash é retornado como um array de bytes, que pode ser impresso utilizando o método citado em um post anterior:
private static String stringHexa(byte[] bytes) { StringBuilder s = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { int parteAlta = ((bytes[i] >> 4) & 0xf) << 4; int parteBaixa = bytes[i] & 0xf; if (parteAlta == 0) s.append('0'); s.append(Integer.toHexString(parteAlta | parteBaixa)); } return s.toString(); }
Além do MD5, podemos também usar outros algoritmos de hash normalmente presentes nas distribuições da JVM. O exemplo a seguir gera os códigos MD5, SHA-1 e SHA-256 da mesma mensagem:
public static byte[] gerarHash(String frase, String algoritmo) { try { MessageDigest md = MessageDigest.getInstance(algoritmo); md.update(frase.getBytes()); return md.digest(); } catch (NoSuchAlgorithmException e) { return null; } }
public static void main(String[] args) { String frase = "Quero gerar códigos hash desta mensagem."; System.out.println(stringHexa(gerarHash(frase, "MD5"))); System.out.println(stringHexa(gerarHash(frase, "SHA-1"))); System.out.println(stringHexa(gerarHash(frase, "SHA-256"))); }
A saída deste programa será:
51408e7592917e916b55f8021a0f7ad3 5907736c4de6fdd70fcdc7517c3aebd257a1addc ed40c896d779f946956483d45e9efe08aac6373935d354c2be2136bf05bca42c
Mandou muito bem. Simples e direto ao ponto. Fechou.
Quando o Hexa dá um valor abaixo de 10 ele está perdendo um dígito.
Ex.: ao invés de:
d0970714757783e6cf17b26fb8e2298f
Dá:
d097714757783e6cf17b26fb8e2298f
Pois o Hexa fica 7 ao invés de 07.
Para resolver fiz a adaptação abaixo:
StringBuffer s = new StringBuffer(“”);
String hex = new String();
for (int i = 0; i > 4) & 0xf) << 4)
| (bytes[i] & 0xf));
if (hex.length()==1){
s.append(“0”);
}
s.append(hex);
}
return s.toString();
Estou com um problema.
Existe uma aplicação PHP que gera e grava os dados MD5 em uma base de dados mssql.
Estou desenvolvendo uma aplicação em asp.net(csharp) para substituir esse cancer, porém o md5 gerado no meu código csharp não é igual ao que está na base de dados.
alguém sabe porque?
sugiro o uso do HexBin pra encode/decode de hex
Daniel, envie esta sua correção por email..
Eu copiei seu código mas deu erro..
Abraços!
Daniel, obrigado pelo toque. Já corrigi o post. ;-)
Olá, vc corrigiu a saída do programa também?
cara valeu….você eh o cara !
cara to com um probelamao com este MD5,consigo converter as senhas geradas pelos usuarios ,mas nao consigo logar depois , no game
diz q minha senha esta incorreta alguem sabe como remvo o md5 , do banco de dados, acho q se remover o md5 descomplica, mas nao sei fazer isso
agradeço
Caros,
O trecho de código
int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;
int parteBaixa = bytes[i] & 0xf;
if (parteAlta == 0) s.append(‘0’);
Não poderia ser substituído por um simples if verificando se o valor é menor igual a 15 e nesse caso fazer um append de zero?
O código ficaria assim:
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] <= 15) s.append(‘0’);
s.append(Integer.toHexString(bytes[i]));
}
[]´s
Renato
Esquecam o comentário anterior, estava desconsiderando a parte negativa. :S
[]´s
Renato
Estou com problemas no envio de do arquivo da CAPESAÚDE (TISS ELETRÔNICO), sempre dá erro.
Aparece a informação abaixo:
** Aguardando comandos…
** C:\Documents and Settings\est13\Meus documentos\ROSI FREIRE\CAPECONSULTA ENVIO DE LOTE 70183-16-04-08.xml: C:\Documents and Settings\est13\Meus documentos\ROSI FREIRE\CAPECONSULTA ENVIO DE LOTE 70183-16-04-08.xml: Mensagem TISS com problemas: “hash” MD5 não confere
Certa de Vossa ajuda! Desde já agradecida.
Respeitosamente,
Mª da Conceição
Fico grata se poderem me ajudar quanto o problema de “rash MD5” do arquivo que estou tentando enviar. Sempre dá erro conforme abaixo descrito:
** Aguardando comandos…
** C:\Documents and Settings\est13\Meus documentos\ROSI FREIRE\CAPECONSULTA ENVIO DE LOTE 70183-16-04-08.xml: C:\Documents and Settings\est13\Meus documentos\ROSI FREIRE\CAPECONSULTA ENVIO DE LOTE 70183-16-04-08.xml: Mensagem TISS com problemas: “hash” MD5 não confere
1155CAAC7BD402F89C820852BFB496D9
Certo de Vossa atenção.
Respeitosamente,
Maria da Conceição.
Maria, os únicos que podem te ajudar são os autores do programa que você está usando.
São Gonçalo/RJ 25 de abril de 2008.
O programa que utilizo apenas para digitação das guias do convênio é a PLATAFORMA DA ORIZON, mas nós fazemos a exportação do arquivo em XML e enviamos pelo TISS NET, que é um programa gratuito a qual não conseguimos identificar a causa do erro; no entanto não temos suporte da mesma, pois nem o convênio, nem nossa empresa tem contrato com a ORIZON.
Será que alguém pode me dá uma dica como resolver esse problema que está abaixo descrito: (Mensagem TISS com problemas: “hash” MD5 não confere)
** Aguardando comandos…
** C:\Documents and Settings\est13\Meus documentos\ROSI FREIRE\CAPECONSULTA ENVIO DE LOTE 70183-16-04-08.xml: C:\Documents and Settings\est13\Meus documentos\ROSI FREIRE\CAPECONSULTA ENVIO DE LOTE 70183-16-04-08.xml: Mensagem TISS com problemas: “hash” MD5 não confere
1155CAAC7BD402F89C820852BFB496D9
Mais uma vez grata pela atenção.
Respeitosamente,
Maria da Conceição
Faturamento CONLAB
TISS NET é um programa gratuito criado pela ANS, mas é impossível conseguir falar com eles.
Respeitosamente,
Maria da Conceição.
Faturamento
São Gonçalo/RJ
Obrigada pela atenção Eduardo Habkost! Se você tiver como me passar alguma informação a respeito do assunto que enviei anteriormente, fico agradecida.
Respeitosamente,
Maria da Conceição
Faturamneto CONLAB
Maria da Conceição,
O problema está no sistema que gerou o XML.
Para resolver o problema desta guia, clique no link ao lago ou no site abaixo:
evandro.net/tiss/tiss-hash-md5-nao-confere.html
O Hash MD5 é um epílogo (encerramento) que garante que nenhuma informação do XML foi alterada, seja ela manualmente ou na transmissão dos dados, como uma assinatura eletrônica daquele documento.
Maria da Conceição,
O problema está no sistema que gerou o XML.
Para resolver o problema desta guia, clique no link “MD5 não confere” no lado esquerdo ou entre no site abaixo:
evandro.net/tiss/tiss-hash-md5-nao-confere.html
O Hash MD5 é um epílogo (encerramento) que garante que nenhuma informação do XML foi alterada, seja ela manualmente ou na transmissão dos dados, como uma assinatura eletrônica daquele documento.
Como seria para gerar o arquivo hash de um arquivo?
Tentei fazer este processo lendo linha a linha do arquivo… Mas não deu certo por aqui…
tambem estou com o mesmo problema do hash do cassio
primeiramente tentei jogar todo o texto dentro da funcao q calcula o hash e n deu certo
depois li que o calculo do hash eh soh os valores e nao as tags xml
passei o dia ontem adaptando pra pegar os valores e colocar numa stringona.. mandei calcular o hash e ainda apresenta erro
estou meio sem saida!
João Del Valle, estou com problemas, para emitir nota fiscal feita na impressora laser e que pra ter validade tem decolocar achave md5 na nota e posteriormente todas as notas gravadas mensalmente em imagem iso com o md5 para garantir a integridade.
meu sistema é em vb voce pode me ajudar a resolver isso.
cara….
o SHA tem as seguintes formas….
SHA-1
SHA-256
e SHA – 512.
se vc substituir o trecho do código acima do POST por SHA-512 ele dá ainda mais segurança.
irá gerar um código de 512 caracteres.
enquanto o md5 gera 32 caracteres.
Especialistas estimam que para
alguém conseguir quebrar uma criptografia usando chaves de 64 bits na base da tentativa e erro,
levaria cerca de 100.000 anos usando um PC comum.
Mas porque é tão seguro? Simples, uma chave de 2 bits terá 4 combinações possíveis.
Uma chave de 4 bits, terá 16 combinações possíveis e assim por diante. Agora,
vejamos a grande diferença: uma chave de apenas 8 bits terá 65.356 combinações possíveis e,
em uma chave de 32 bits existem mais de 4 bilhões de combinações, que para serem decifradas
levariam mais de 2 meses (levando em conta 1000 tentativas por segundo, por parte do computador).
AGORA IMAGINA 512 CARACTERS????
tenta ai galera… to tentanuh aqui e naum to conseguindo naum…kkkkk
vlwsss
Boa tarde galera e Arimateia, tudo bem com vocês?
Seguinte, como recentemente tive a necessidade de fazer o calculo do hash em arquivos xml padrão tiss, desenvolvi um script em python que pode calcular o hash de qualquer arquivo xml, e publiquei no vivaolinux , além do calculo do hash onde o sistema entra em todos os nodos do xml de forma recurssiva, ele mostra na tela a estrutura do arquivo xml em formato de arvore, como o conhecimento é para desfruto de todos, espero que ajude pessoas que precisem calcular o hash varias vezes por algum motivo, e o xml seja maior que o padrão da ans (100 guias), ou pessoas que necessitem somente extrair o conteúdo dos seus arquivos e visualizar a estrutura.
Vlw galera e um forte agraço
link: http://www.vivaolinux.com.br/script/Leitura-de-todos-os-valores-de-qualquer-xml
Valeu, meu brother. Ajudou pacas aqui. Sucesso.