Criptografia padrão MD5, alguem ja usou?

8 respostas
anjomal

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 ?

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();
        }

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

falow galera !!!
aquele salve !!!

8 Respostas

dukejeffrie

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;
    }

}
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 :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

Elvis.The.Pelvis

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.

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.

Alguém tem experiência com isso?

Abraços

Criado 21 de janeiro de 2003
Ultima resposta 14 de abr. de 2004
Respostas 8
Participantes 4