| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/11/2006 06:02:36
|
wmarinheiro
Entusiasta Java
![[Avatar]](/images/avatar/7a9aa819c5733930f0df26f4c3e0e4ff.jpg)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/11/2006 10:28:25
|
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/11/2006 11:17:40
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/11/2006 13:43:47
|
wmarinheiro
Entusiasta Java
![[Avatar]](/images/avatar/7a9aa819c5733930f0df26f4c3e0e4ff.jpg)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2007 19:16:23
|
rodrigousp
JavaEvangelist
![[Avatar]](/images/avatar/69d1fc78dbda242c43ad6590368912d4.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/09/2007 19:26:42
|
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.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/10/2007 10:40:18
|
rodrigousp
JavaEvangelist
![[Avatar]](/images/avatar/69d1fc78dbda242c43ad6590368912d4.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/01/2009 19:45:13
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/05/2009 00:36:34
|
hmgsouza
What is classpath?
![[Avatar]](/images/avatar/f7ca2073f3d5776024bad3ab86d6077c.jpg)
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) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 05/10/2009 18:01:19
|
Mandrake6
What is classpath?
![[Avatar]](/images/avatar/4b6ff1569f3a4a0ada118e6d70fc7a71.jpg)
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!
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/01/2010 14:58:27
|
xjunior
JavaEvangelist
![[Avatar]](/images/avatar/7d5e16c1a728cb7d3e40ffa4eadb67ab.png)
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. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/05/2010 01:32:19
|
lsouzabr
Entusiasta Java
![[Avatar]](/images/avatar/4b7c04fdeac958c1ea5f46f053e871b5.jpg)
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.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2011 22:33:50
|
wallashss
What is classpath?
![[Avatar]](/images/avatar/c58afe650e4968593fa74d8dbb713eed.jpg)
Membro desde: 26/01/2011 22:32:37
Mensagens: 7
Offline
|
vlws!
|
Wallas |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/10/2011 21:37:16
|
Sombriks
Java Ninja
![[Avatar]](/images/avatar/65b0df23fd2d449ae1e4b2d27151d73b.jpg)
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/
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/05/2012 11:53:21
|
gRoOve
JavaEvangelist
![[Avatar]](/images/avatar/1c3ca1827456a5d199bccb6d74777fc2.jpg)
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..
|
 |
|
|
 |
|
|