Criptografia + Java

quero criptografar minha senha…alguem conhece alguma API?ALGUEM TEIA ALGUM EXEMPLO?

Procure neste fórum por “MD5” e “Senhas”

Você pode fazer assim:

import sun.misc.BASE64Encoder;
import usuario.Usuario;

public class CadastroUsuario{

String senhacriptografada;
BASE64Encoder encoder;

Usuario usuario = new Usuario();
usuario.setLogin( “fulano”);
usuario.setSenha(“12345”);

encoder = new BASE64Encoder();
senhacriptografada = encoder.encode( usuario.getSenha().getBytes) );
usuario.setSenha( senhacriptografada );

}

Simplesmente gravar os bytes em Base-64 não criptografa nada (como o Rulio fez).
Cuidado!

Leia o método "main" e veja como é que se usa esse método "toPassword".

import java.security.*;

public class PasswordMD5 {
	public static void main(String[] args) {
		try {
		    String password = PasswordMD5.toPassword ("NicoleKidman"); // a senha cadastrada
		    System.out.println ("password = " + password);
		    String password2 = PasswordMD5.toPassword ("NicoleKIdman"); // usuário digitou errado
		    System.out.println ("password2 = " + password2);
		    String password3 = PasswordMD5.toPassword ("NicoleKidman"); // usuário digitou certo
		    System.out.println ("password3 = " + password3); 
		    if (!password.equals(password2)) {
		        // como a senha não bate...
		        System.out.println ("password2 eh uma senha incorreta"); 
                    }
		    if (password.equals(password3)) {
		        // como a senha bate...
		        System.out.println ("password3 eh uma senha correta"); 
                    }
		} catch (Exception ex) {
		    ex.printStackTrace();
		}
        }
	private static String bytesToHex (byte[] b) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i &lt b.length; ++i) {
			sb.append ((Integer.toHexString((b[i] & 0xFF) | 0x100)).substring(1,3));
		}
		return sb.toString();
	}
	public static String toPassword (String data) throws NoSuchAlgorithmException {
		byte[] mybytes = data.getBytes();
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		byte[] md5digest = md5.digest (mybytes);
		return bytesToHex (md5digest);
	}
}

Se for para algum sistema “em produção”, recomendo não usar mais o algoritmo MD5, pois as “consultorias de segurança” estão barrando a utilização deste algoritmo nos sistemas.

PS: Não crie outro tópico sobre o mesmo assunto.
PS2: Veja o que o thingol escreveu: Base64 não é algoritmo de criptografia.

calma ai gente, a minha intenção é das melhores possíveis. Estamos no mesmo barco.
Até minutos atraz pensei que seria. Mas já que não é me explica ai.
Descupa ai…

PS: Até é algoritmo, mas se não é mais usado é outra coisa. Isso é um algoritmo de chave compartilhada.

Rulio, é o seguinte: criptografia é algo que é um pouco mais complicado que parece.

Digamos que você use o seu algoritmo para "cifrar" as seguintes senhas:

"Nicole Kidman" -&gt Tmljb2xlIEtpZG1hbg==
"Nicole kidman" -&gt Tmljb2xlIGtpZG1hbg==

(OK, se você prefere outra atriz ponha outro exemplo aqui :stuck_out_tongue:
Por exemplo, "Jennifer Lopez" -&gt SmVuaWZmZXIgTG9wZXo= )

Se você olhar direitinho, as senhas são quase iguais, e quando você usa "Base-64" para convertê-las, elas também são quase iguais (uma letra E na primeira posição, uma letra G na segunda posição).
Ou seja, qualquer um, com um pouco de paciência, seria capaz de (olhando um arquivo com várias senhas) deduzir como é que você fez a codificação.

Usando o MD5, isso já é mais complicado (como o exemplo que dei no programa postado). Na verdade, no caso do MD5, seria necessária uma busca exaustiva para achar a senha.

(O Oyama notou que estou usando o MD5, que está “deprecated”; pode trocar por algum outro algoritmo, como o SHA-256. (O SHA-1 também foi considerado inseguro.)

public static void main(String[] args) {
	String senha = "123";
	MessageDigest md = null;
	try {
		md = MessageDigest.getInstance("MD5");
	} catch (Exception e) {
		e.printStackTrace();
	}
	byte[] senhaBytes = senha.getBytes();
	byte[] hash = md.digest(senhaBytes);
	String senhaHash = Util.encodeBase64(hash);

	System.out.println(senhaHash);
}

ah. para o código acima:

import java.security.MessageDigest;

import org.jboss.security.Util;

blz então… Valeu brother…

import org.jboss.security.Util;

Onde consigo?

[quote=thingol]Rulio, é o seguinte: criptografia é algo que é um pouco mais complicado que parece.

Digamos que você use o seu algoritmo para "cifrar" as seguintes senhas:

"Nicole Kidman" -&gt Tmljb2xlIEtpZG1hbg==
"Nicole kidman" -&gt Tmljb2xlIGtpZG1hbg==

(OK, se você prefere outra atriz ponha outro exemplo aqui :stuck_out_tongue:
Por exemplo, "Jennifer Lopez" -&gt SmVuaWZmZXIgTG9wZXo= )

Se você olhar direitinho, as senhas são quase iguais, e quando você usa "Base-64" para convertê-las, elas também são quase iguais (uma letra E na primeira posição, uma letra G na segunda posição).
Ou seja, qualquer um, com um pouco de paciência, seria capaz de (olhando um arquivo com várias senhas) deduzir como é que você fez a codificação.

Usando o MD5, isso já é mais complicado (como o exemplo que dei no programa postado). Na verdade, no caso do MD5, seria necessária uma busca exaustiva para achar a senha.

(O Oyama notou que estou usando o MD5, que está “deprecated”; pode trocar por algum outro algoritmo, como o SHA-256. (O SHA-1 também foi considerado inseguro.)
[/quote]

Então julio eu estava lendo o tópico ja que estou procurando também uma forma de criptografia eficiente, mas o meu objetivo não é para usar como senha, mas com transferência de informações, pois no meu programa existe um certo momento que o usuário pode alterar as informações e por isso e importante que esteja criptografado então para que o mesmo funcione preciso de algo que alem de criptografar também eu possa depois fazer a descriptografa

Pelo que eu vi em minhas pesquisas, o “MD5” e quase impossível de descriptografa, então ele se funciona comparando as senhas criptografadas ja que no banco de dados vai ficar a senha criptografado e quando o usuario digitar a senha a mesma digitada será criptografada e comparada, mas esse formato não funciona para min

Então se auguem souber como me ajudar agradeço

[quote=Victor Gerin][quote=thingol]Rulio, é o seguinte: criptografia é algo que é um pouco mais complicado que parece.

Digamos que você use o seu algoritmo para "cifrar" as seguintes senhas:

"Nicole Kidman" -&gt Tmljb2xlIEtpZG1hbg==
"Nicole kidman" -&gt Tmljb2xlIGtpZG1hbg==

(OK, se você prefere outra atriz ponha outro exemplo aqui :stuck_out_tongue:
Por exemplo, "Jennifer Lopez" -&gt SmVuaWZmZXIgTG9wZXo= )

Se você olhar direitinho, as senhas são quase iguais, e quando você usa "Base-64" para convertê-las, elas também são quase iguais (uma letra E na primeira posição, uma letra G na segunda posição).
Ou seja, qualquer um, com um pouco de paciência, seria capaz de (olhando um arquivo com várias senhas) deduzir como é que você fez a codificação.

Usando o MD5, isso já é mais complicado (como o exemplo que dei no programa postado). Na verdade, no caso do MD5, seria necessária uma busca exaustiva para achar a senha.

(O Oyama notou que estou usando o MD5, que está “deprecated”; pode trocar por algum outro algoritmo, como o SHA-256. (O SHA-1 também foi considerado inseguro.)
[/quote]

Então julio eu estava lendo o tópico ja que estou procurando também uma forma de criptografia eficiente, mas o meu objetivo não é para usar como senha, mas com transferência de informações, pois no meu programa existe um certo momento que o usuário pode alterar as informações e por isso e importante que esteja criptografado então para que o mesmo funcione preciso de algo que alem de criptografar também eu possa depois fazer a descriptografa

Pelo que eu vi em minhas pesquisas, o “MD5” e quase impossível de descriptografa, então ele se funciona comparando as senhas criptografadas ja que no banco de dados vai ficar a senha criptografado e quando o usuario digitar a senha a mesma digitada será criptografada e comparada, mas esse formato não funciona para min

Então se auguem souber como me ajudar agradeço [/quote]

acredito que isso te ajude.

[quote=Victor Gerin][quote=thingol]Rulio, é o seguinte: criptografia é algo que é um pouco mais complicado que parece.

Digamos que você use o seu algoritmo para "cifrar" as seguintes senhas:

"Nicole Kidman" -&gt Tmljb2xlIEtpZG1hbg==
"Nicole kidman" -&gt Tmljb2xlIGtpZG1hbg==

(OK, se você prefere outra atriz ponha outro exemplo aqui :stuck_out_tongue:
Por exemplo, "Jennifer Lopez" -&gt SmVuaWZmZXIgTG9wZXo= )

Se você olhar direitinho, as senhas são quase iguais, e quando você usa "Base-64" para convertê-las, elas também são quase iguais (uma letra E na primeira posição, uma letra G na segunda posição).
Ou seja, qualquer um, com um pouco de paciência, seria capaz de (olhando um arquivo com várias senhas) deduzir como é que você fez a codificação.

Usando o MD5, isso já é mais complicado (como o exemplo que dei no programa postado). Na verdade, no caso do MD5, seria necessária uma busca exaustiva para achar a senha.

(O Oyama notou que estou usando o MD5, que está “deprecated”; pode trocar por algum outro algoritmo, como o SHA-256. (O SHA-1 também foi considerado inseguro.)
[/quote]

Então julio eu estava lendo o tópico ja que estou procurando também uma forma de criptografia eficiente, mas o meu objetivo não é para usar como senha, mas com transferência de informações, pois no meu programa existe um certo momento que o usuário pode alterar as informações e por isso e importante que esteja criptografado então para que o mesmo funcione preciso de algo que alem de criptografar também eu possa depois fazer a descriptografa

Pelo que eu vi em minhas pesquisas, o “MD5” e quase impossível de descriptografa, então ele se funciona comparando as senhas criptografadas ja que no banco de dados vai ficar a senha criptografado e quando o usuario digitar a senha a mesma digitada será criptografada e comparada, mas esse formato não funciona para min

Então se auguem souber como me ajudar agradeço [/quote]

acha trabalhoso se você implementasse seu próprio algoritimo de criptografia ? seria a mais segura, pois sómente você saberia a formula, e poderia ter as duas vias criptografar e descriptografar.