E ai bravos guerreiros JAVANESES da terra média, blz !!!
Bom pessoal fiz um Sistema ele criptografa no padrão MD5, so que esta tendo um probleminha na hora de testar se a senha esta correta eu tenho de criptografar a senha de entrada de dados do usuario e bater com a criptografada no meu BANCO DE DADOS, so que o seguinte eu cadastro o usuario ANJOMAL com a senha “MESTRE” blz criptografa, ai o ANJOMAL vai acessar o sistema ele digita “MESTRE” na tela de login eu pego essa entrada e criptografo ela para testar se e igual a que esta no BANCOD DE DADOS (Isso pq não da pra descriptografar MD5 e irreversivel), so que nunca batem cada hora que eu cadastro um usuario com a mesma senha mestre o resultado da criptografia e diferente :?: :?: :?: oque eu estou fazendo de errado ? eu acho que o MD5 faz criptografias diferentes mesmo, mais ai como vou fazer para testar ? ai galera me da uma LUZ !!!
PARA QUE JANELAS SE POSSO VIVER SEM PAREDES !!!
SEJA LIVRE USE LINUX !!!
Quando você criptografa, como é que você grava no banco? Uma string HEXA? Uma String montada com os bytes de retorno? Manda exibir o conteudo do banco e a senha criptografada. O resultado deveria ser o mesmo.
Uma vez fui usar criptografia com SQLServer. Só que quando criptografava (não foi no padrão MD5), a senha as vezes vinha com o caracter ‘u0013’ (retorno de carro) ou ‘u0010’ (carriage return). Só que a bost@ do banco truncava a senha quando encontrava um carriage return.
Tivemos que marretar e toda vez que encontrasse um char 10 ou 13, incrementavamos o valor para 11 ou 14. SQLServer eh uma bost@ mesmo. Não sei se é o caso com o interbase. Acredito que não mas… sei lá, de repente…
anjomal
Ai elvis olha só essa e a classe que criptografa os dados,eu gravo seu retorno em um campo do tipo BLOB,e quando quero retornar a senha dou um getString nesse campo. mais ja tentei passar essse campor para char,varchar mair o problema persisite vai ai o codigo segura !!!
packageutil;importjava.security.*;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;}}
e isso ai, ve se vc acha algum erro bom eu não achei anda tem alguma coisa haver com o padrão MD5.
t+
Elvis.The.Pelvis
Vou dar uma olhada qd chegar em casa. Se descobrir qquer coisa, edito este post blz???
anjomal
falow
valew !!!
Elvis.The.Pelvis
Ae dos inferno .
Criei um projeto no eclipse que usa sua classe para gerar as senhas.
Inseri no banco postgreSQL a senha criptografada.
Depois, faço uma consulta, exibindo a senha recém gravada.
Chamo novamente o md5 em cima da mesma senha e ecomparo os resultados. Veja no que deu (isso é o output do ant):
all:[echo]Rodandoaplicacao//Gero a senha[java]"MESTRE"criptografadoeh:55cc1e315cbf9dab702675ff92c7fb35//gravo no banco[java]Dadosinseridoscomsucesso.//recupero a senha no banco[java]Senhacadastradanobancoparaologin"ANJOMAL"foi:55cc1e315cbf9dab702675ff92c7fb35//comparo a senha que está gravada no banco com MD5Builder.md5("MESTRE");[java]Comparandoassenhas...[java]Senhabateu[echo]Pronto!
Ou seja. Aqui rodou tudo legal. Comparei as senhas da seguinte forma:
stmt=con.prepareStatement("select * from users where login = ?");stmt.setString(1,"ANJOMAL");ResultSetrs=stmt.executeQuery();StringsenhaNoBanco=null;if(rs.next()){senhaNoBanco=rs.getString("senha");}else{thrownewRuntimeException("Usuário "ANJOMAL" não encontrado");}System.out.println("Senha cadastrada no banco para o login "ANJOMAL" "+"foi: "+senhaNoBanco);System.out.println("Comparando as senhas...");//Renomeei tua classe de MD5 para MD5Builderif(MD5Builder.md5("MESTRE").equalsIgnoreCase(senhaNoBanco)){System.out.println("Senha bateu");}else{System.out.println("Login falhou");}
Lembre-se que md5(“MESTRE”); é diferente de md5(“mestre”); que é diferente de md5(“MeStRe”);
Elvis, escreve um artigo sobre isso!! Algo simples e direto !!
Rafael
Elvis.The.Pelvis
Blz. Agora tem muito pouco pra falar. O tutorial ia ser bem pequeno.
Notei também que vocês não possuem um tutorial struts. Me permitem?
[Edited]Aí. Onde é que tá o template dos tutoriais.
Rafael_Steil
Opa, mete bala
( o tutorial sobre md5 seria pra ter de forma organizada e mais formal… aki no forum fica meio perdido… )
Rafael
anjomal
Dos infernos blz … ficou legal, mais ontem rapaz eu descobri pq as senhas não batiam um bug no JPasswordField, ou um conflito de conceitos meu :shock: eu estava chamando passwd.getPassword().toString() na realidade esse metodo não trasforma o Array de chars em String(era oque eu deduzi) :oops: então fiz uma função dentro do propio equals da classe MD5 em que eu trasformo o Array de chars em uma String Atraves do StringBuffer, somado ao que vc me passou ontem a noite=Problema Resolvido.