Aguem aqui ja trabalhou com criptografia usando o padrao MD5 ? esse padrão esta implementado no JAVA ? me passaram o codigo abaixo, mais não funciona ? tem alguma coisa errada ?
Não sei a qualidade desse código, mas foi usado em um projeto de verdade, portanto deve estar de acordo com as especificações.
Aquelão!!
publicclassMD5{/* RFC1321 MD5: http://www.faqs.org/rfcs/rfc1321.html MD5 test suite: MD5 ("") = d41d8cd98f00b204e9800998ecf8427e MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661 MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72 MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0 MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = d174ab98d277d9f5a5611c2c9f419d9f MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = 57edf4a22be3c955ac49da2e2107b67a*/privatestaticStringhexDigits="0123456789abcdef";privatestaticMessageDigestmd=null;/** * Calculates the MD5 hash of str using the * RSA Data Security, Inc. MD5 Message-Digest Algorithm, * @return String containing 32 hexadecimal hash or null in case of error. */publicstaticStringmd5(Stringstr){try{if(md==null){md=MessageDigest.getInstance("MD5");}byteb[];StringBuffersbuffer=newStringBuffer();md.reset();b=md.digest(str.getBytes());for(inti=0;i<16;i++){intj=((int)b[i])&0xFF;sbuffer.append(hexDigits.charAt(j/16));sbuffer.append(hexDigits.charAt(j%16));}returnsbuffer.toString();}catch(Exceptione){System.err.println("Error MD5: "+e.getMessage());}returnnull;}}
Elvis.The.Pelvis
Tá td certo. O Java já tem ela implementada. Já repondi sobre isso aqui no fórum, inclusive tinha um exemplo. Dá uma busca pelo search.
anjomal
Foi para mim mesmo que vc respondeu elvis, o codigo acima e de sua altoria a unica coisa que eu mudei e que vc me passou um metodo String.toBytes e na verdade esse metodo não existe oque existe e String.getByte mais não esta criptografando !!! esse e o problema a função simplimente não funciona, mais tb não da erro. vc tem uma explicação para isso ?
aquele salve !!!
falow
Elvis.The.Pelvis
Olha aí.
importjava.security.*;/* * DataArq.java * * Created on 21 de Janeiro de 2003, 14:31 *//** * * @author freitas */publicclassDataArq{publicstaticvoidmain(String[]args){DataArqa=newDataArq();System.out.println(a.encripta("Elvis.The.Pelvis"));}publicStringencripta(Stringpasswd){byte[]cripty=passwd.getBytes();byte[]resultado;try{MessageDigestmd5=MessageDigest.getInstance("MD5");resultado=md5.digest(cripty);}catch(NoSuchAlgorithmExceptione){javax.swing.JOptionPane.showMessageDialog(null,e.toString());resultado="".getBytes();}returnnewString(resultado);}}
A resposta dá: c♠È£µ↑½Ùº╦"I£↓^■
Bem, na verdade a resposta é menor só que quando eu colei aqui no fórum ele deve ter substituido alguns caracteres por códigos. A resposta deve ser uma string contendo 16 caracteres. O padrão MD5 retorna um array de 32 bytes, que quando utilizados para construir uma String da uma de 16 chars, já que no unicode 2 bytes = 1 char.
anjomal
E oque vc me diz do codigo passado pelo nosso amigo dukejeffrie, fiz por ele e tb criptrografou. na verdade elvis eu quero criar um pequeno Servelet quue escreva np passwd do Linux então eu tenho de ter certteza de que a criptografia bate blz …
falow
t+
Elvis.The.Pelvis
O resultado da criptografia dará sempre o mesmo para uma mesma entrada: um array de 32 bytes (pelo MD5 pelo menos).
Só que a forma como você vai exibir depende. No meu caso, criei uma string a partir do array, já o duke imprimiu uma codificacao em haxadecimal.
Você precisa saber como o linux grava neste arquivo. O que ele faz com o array de 32 bytes, como ele o formata?
Elvis.The.Pelvis
Ops. Perdão. um array de 16 bytes, 32 caracteres hexa.
danieldestro
Pessoal,
pegando carono no POST.
Eu preciso acessar um WebService autenticado. Para isso eu devo gerar uma chave pública e uma privada. Deverei usar o algorítmo MD5 com RSA.
Deverei passar a string do hexadecimal da chave pública, no formato X509 para o fornecedor do WebService, para que ele possa me autenticar, pelo código de acesso encriptado pela minha chave privada.