MD5 com java  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
wmarinheiro
Entusiasta Java
[Avatar]

Membro desde: 11/11/2006 21:38:18
Mensagens: 19
Offline

Caros amigos,
Esta rotina transforma uma String em uma cadeia de 32 caracteres (um hash)
Ela é normalmente utilizada para criptografar senha de usuários, funcionando da seguinte maneira:
1) O sistema recebe a senha, cria um hash e armazena no banco de dados
2) Para efetuar o login o sistema recebe a senha, passa pela mesma função (criando outro hash)
e compara com o que está na base de dados.



Copie o codigo e salve-o como principal.java dentro do seu projeto.

Sempre às ordens,
Wellington Marinheiro
[Email]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Só tomar cuidado com duas coisas.



a) "senha.getBytes()" pode dar resultados diferentes conforme seu sistema operacional. Por exemplo, no Windows em inglês o "encoding" padrão é parecido com o ISO-8859-1, e no Linux o "encoding" padrão é UTF-8. Portanto, é necessário explicitar o encoding (ou seja, algo como 'senha.getBytes("UTF-8")') para não ter problemas quando for usar a mesma base de senhas em vários sistemas operacionais.

b) Usar BigInteger para converter para hexadecimal é válido, mas você pode ter (a probabilidade é de aproximadamente 1/16 + 1/256, ou seja, 6,65%) uma string com menos de 32 caracteres. Complete o resultado com zeros à esquerda.
[WWW]
armando
Java Ninja

Membro desde: 27/03/2006 14:23:57
Mensagens: 263
Offline

Apenas como observação, também... O algoritmo de hashing MD5 já está sendo considerado quebrado por grande parte dos criptólogos. Para aplicações novas, prefira os SHA.

Abraço,

Armando
wmarinheiro
Entusiasta Java
[Avatar]

Membro desde: 11/11/2006 21:38:18
Mensagens: 19
Offline

Caros amigos,

Em nenhum momento eu sugeri que esta era a melhor e mais segura maneira de se fazer a coisa.
Apenas encontrei uma maneira extremanete prática de se gerar um hash de uma string utilizando MD5.

Para simplificar mais ainda, não chamem a função, façam assim:



Espero ter ajudado alguem
Wellington Marinheiro
[Email]
rodrigousp
JavaEvangelist
[Avatar]

Membro desde: 09/10/2003 14:23:31
Mensagens: 379
Offline

Vocês não acham a solução da SUN tosca !?
É preciso carregar a String toda em memória para calcular o MD5. Não tentem isto com arquivos grandes.
Acho mais apropriado utilizar uma biblioteca que calcule o MD5 para um Stream.

Ocorre que para calcular o MD5 não é necessário muita memória, blocos de 128bits são calculados de cada vez e de cada bloco guarda-se os valores em 4 variáveis de 32 bits.

Eu recomendo fortemente o jigsaw da w3c cuja licença permite o uso em software proprietários .
http://www.w3.org/Jigsaw/

[]'s



Rodrigo di Lorenzo Lopes - blogger
[MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

rodrigousp wrote:Vocês não acham a solução da SUN tosca !?
É preciso carregar a String toda em memória para calcular o MD5. Não tentem isto com arquivos grandes.
Acho mais apropriado utilizar uma biblioteca que calcule o MD5 para um Stream.

Use DigestInputStream, que faz exatamente isso.


[WWW]
rodrigousp
JavaEvangelist
[Avatar]

Membro desde: 09/10/2003 14:23:31
Mensagens: 379
Offline

Boa Thingol!
Minhas Desculpas para a SUN.
Agora temos a seguinte solução alternativa:

Rodrigo di Lorenzo Lopes - blogger
[MSN] [ICQ]
brg
Thread.start()

Membro desde: 28/03/2006 14:49:04
Mensagens: 39
Localização: Santa Maria - RS
Offline

Se eu colocar o getBytes("UTF-8"); o método toString continuaria recebendo o parâmetro 16?
hmgsouza
What is classpath?
[Avatar]

Membro desde: 30/05/2009 00:34:36
Mensagens: 9
Offline

Genial wmarinheiro

Os caras ficam ai criticando, mas vc foi o unico que conseguiu mostrar a criptografia de forma simples!!!

Se não eficiente.... ao menos foi didático!!!!

Vlw mesmo.

De fato, não fracassei ao tentar, cerca de 10.000 vezes, desenvolver um acumulador. Simplesmente, encontrei 10.000 maneiras que não funcionam. (Thomas A. Edson)
[Email]
Mandrake6
What is classpath?
[Avatar]

Membro desde: 01/02/2009 23:05:05
Mensagens: 6
Offline

Cara fantástico.
Mto útil mesmo. E acima de tudo Didático.

E quanto o pessoal ter comentado que MD5 não eh tão segura pq não tentam usar Salt?

Thx Guy!

xjunior
JavaEvangelist
[Avatar]

Membro desde: 26/08/2009 15:49:19
Mensagens: 321
Localização: Belo Horizonte - MG
Offline

Não é melhor usar o SHA1 ou as derivações dele? tipo SHA128 ou SHA256... Ainda a partir das variações superiores ao SHA128 não foram encontrados colisões...

acessem um dos melhores foruns de TI: http://www.clubedaprogramacao.com/forum/


Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
lsouzabr
Entusiasta Java
[Avatar]

Membro desde: 24/05/2008 14:29:32
Mensagens: 19
Offline

wmarinheiro wrote:Caros amigos,
Esta rotina transforma uma String em uma cadeia de 32 caracteres (um hash)
Ela é normalmente utilizada para criptografar senha de usuários, funcionando da seguinte maneira:
1) O sistema recebe a senha, cria um hash e armazena no banco de dados
2) Para efetuar o login o sistema recebe a senha, passa pela mesma função (criando outro hash)
e compara com o que está na base de dados.



Copie o codigo e salve-o como principal.java dentro do seu projeto.

Sempre às ordens,
Wellington Marinheiro




Obrigado pelo código.
[MSN]
wallashss
What is classpath?
[Avatar]

Membro desde: 26/01/2011 22:32:37
Mensagens: 7
Offline


vlws!

Wallas 
[WWW]
Sombriks
Java Ninja
[Avatar]

Membro desde: 14/04/2005 16:36:03
Mensagens: 250
Localização: Fortaleza, CE
Offline

meus 5 centavos à discussão:


Aqui o truque para evitar hashes quebrados reside no 'ps.printf("%02x", 0xFF & b);'.

Linux user #391803.
http://counter.li.org/
gRoOve
JavaEvangelist
[Avatar]

Membro desde: 11/03/2009 09:17:33
Mensagens: 443
Localização: Curitiba - PR
Offline

Não existe uma biblioteca nativa que possua um método pra gerar o hash md5 de forma automática?
Me surpreendi ao perceber que é necessário tratar o hash gerado..até em php tem um método nativo..



[Email]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team