Criptografia padrão MD5, alguem ja usou?

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 ?

[code] public String Encripta(String Passwd) {
byte[] Cripty = Passwd.getBytes();
byte[] Resultado;

    try {
        
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        Resultado = md5.digest(Cripty);
        
    }catch(NoSuchAlgorithmException e) {
        javax.swing.JOptionPane.showMessageDialog(null,e.toString());
        Resultado = "".getBytes();
    }[/code]

eu vi aqui no GUJ uma classe chamada MD5 não sei onde, alguem ja usou ?

falow galera !!!
aquele salve !!!

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!!

public class MD5 
{

/*  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
*/

    private static String hexDigits = "0123456789abcdef";
    private static MessageDigest md = 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.
 */
    public static String md5(String str){
 	try{
	    if (md == null){
		md = MessageDigest.getInstance("MD5");
	    }

	    byte b[];
	    StringBuffer sbuffer = new StringBuffer();
	    md.reset();
 	    b = md.digest( str.getBytes() );
	    for (int i = 0; i < 16; i++) {
		int j = ((int) b[i]) & 0xFF;
		sbuffer.append(hexDigits.charAt(j / 16));
		sbuffer.append(hexDigits.charAt(j % 16));
	    }
	    return sbuffer.toString();
	}
	catch(Exception e){
	    System.err.println("Error MD5: "+e.getMessage());
	}

	return null;
    }

}

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.

Foi para mim mesmo que vc respondeu elvis, o codigo acima e de sua altoria :smiley: 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

Olha aí.

import java.security.*;
/*
 * DataArq.java
 *
 * Created on 21 de Janeiro de 2003, 14:31
 */

/**
 *
 * @author  freitas
 */
public class DataArq {
    public static void main(String[] args) {
        DataArq a = new DataArq();
        System.out.println(a.encripta("Elvis.The.Pelvis"));
    }
    
    public String encripta(String passwd) { 
        byte[] cripty = passwd.getBytes(); 
        byte[] resultado; 
        
        try { 
            
            MessageDigest md5 = MessageDigest.getInstance("MD5"); 
            resultado = md5.digest(cripty); 
            
        }catch(NoSuchAlgorithmException e) { 
            javax.swing.JOptionPane.showMessageDialog(null,e.toString()); 
            resultado = "".getBytes(); 
        }
        
        return new String(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.

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+

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?

Ops. Perdão. um array de 16 bytes, 32 caracteres hexa.

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.

Alguém tem experiência com isso?

Abraços