Criptografia e Mysql

18 respostas
J

Bom Dia!

Estou fazendo projeto final e tem duas tarefas que eu gostaria de fazer e não estou conseguindo:

1 - Tem uma tela de login. No cadastro, a senha é criptografada, já no banco mysql, com o MD5. Tem como, na hora do login, eu comparar a senha criptografando o que o usuario digita pelo mysql. como? ou tenho q criptografar pelo jsp mesmo? Gostaria de saber como resolvo isso.

2 - Faço um upload de um arquivo qualquer para uma pasta do site. Quero gravar os dados do arquivo numa tabela do mysql( nome, tamanho,etc). Como?

18 Respostas

F

jlsan81,

  1. Quando o usuário digita login e senha você tem que “comparar” o que o usuário digitou com o que está no banco. Criptografe a senha que o usuário digitou e compare com a que está no banco.

  2. Não entendi qual a sua duvida.

E

para sua primeira pergunta… eu tbm desenvolvi uma tela de login com a criptografia igual a sua…
o que eu estou fazendo é o seguinte…
o usuário cadastra a senha dele… assim que ele cadastra… já é enviado ao banco criptografado (lógico) e qnd ele vai se logar… ele digita a senha (q é criptografada) e comparada com a do banco!!!
no caso do usuário esquecer a senha eu envio uma senha para ele por e-mail… e se ele quiser trocar… ele tem que cadastrar a senha mais uma vez! (nesse caso utilizo um update na base)

para sua segunda duvida… (eu naum entendi!) ahahaha

J

1)OK, mas como eu criptografo MD5 no jsp?

  1. a dúvida é essa mesmo fsquadro. o que vc não entendeu?

Muito Obrigado pelas respostas… :lol:

E

1-> eu estou usando struts… ai qnd ele manda para a action eu ja faço a criptografia!

2-> cara… nunca precisei fazer isso… naum sei ou naum me lembro como pegar as propriedades do arquivo… (mas naum deve ser dificil… se eu encontrar uma forma de fazer isso eu mando para vc ;))

J

erickcellani:
1-> eu estou usando struts… ai qnd ele manda para a action eu ja faço a criptografia!

2-> cara… nunca precisei fazer isso… naum sei ou naum me lembro como pegar as propriedades do arquivo… (mas naum deve ser dificil… se eu encontrar uma forma de fazer isso eu mando para vc ;))

Valeu cara, vou continuar procurando. Quando eu achar a resposta, posto aqui o código completo.

Abraço

R

Exemplo de criptografia com md5:

public static void main(String[] args) throws Exception {
		String password = "12345";

		byte[] defaultBytes = password.getBytes();
		try {
			MessageDigest algorithm = MessageDigest.getInstance("MD5");
			algorithm.reset();
			algorithm.update(defaultBytes);
			byte messageDigest[] = algorithm.digest();

			StringBuffer hexString = new StringBuffer();
			for (int i = 0; i < messageDigest.length; i++) {
				hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
			}

			System.out.println(
				"password "
					+ password
					+ " md5 version is "
					+ hexString.toString());
			password = hexString + "";
		} catch (NoSuchAlgorithmException nsae) {
			throw nsae;
		}
	}

[]´s

R

Aproveita e dá uma lida em:

[]´s

J

Eu criptografei a senha no cadastro na hora da inserção no BD(insert into … md5(senha)…)

Agora, na hora do login, eu tenho que critografar no jsp antes de comparar ou tem como eu criptografar pelo BD de novo e fazer a comparação??? :roll:

F

jlsan81,

Quando o usuário digitar a senha do login, criptografe ela e compare com a senha que está no banco (que já está criptografada).

Espero ter ajudado.

J

Rafaelprp:
Exemplo de criptografia com md5:

public static void main(String[] args) throws Exception {
		String password = "12345";

		byte[] defaultBytes = password.getBytes();
		try {
			MessageDigest algorithm = MessageDigest.getInstance("MD5");
			algorithm.reset();
			algorithm.update(defaultBytes);
			byte messageDigest[] = algorithm.digest();

			StringBuffer hexString = new StringBuffer();
			for (int i = 0; i < messageDigest.length; i++) {
				hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
			}

			System.out.println(
				"password "
					+ password
					+ " md5 version is "
					+ hexString.toString());
			password = hexString + "";
		} catch (NoSuchAlgorithmException nsae) {
			throw nsae;
		}
	}

[]´s

Esse codigo eu tenho que colocar dentro de um arquivo .java? ou direto no jsp?

Desculpem minha ignorancia… :?

F

jlsan81,

Dentro de um arquivo Java.

:slight_smile:

V

Pq q essas APIs java são tão chatas?
No php vc dá um md5(senha) e pronto :stuck_out_tongue:

J

victorcosta:
Pq q essas APIs java são tão chatas?
No php vc dá um md5(senha) e pronto :P

concordo plenamente.

J

PRONTO!

Arrumei um jeito mais prático(nao garanto a qualidade) de criptografar a senha digitada pelo usuario: pelo próprio BD. Veja abaixo:

Depois eu pego os dados do banco:

E depois comparo:

Só não sei porque sempre dá Usuario ou senha inváldos. Deve ser algo de errado que fiz na comparação. O importante é que os dados estão sendo criptografados.

Obrigado a todos!

F

jlsan81,

Não tem nada de complicado. Veja:

EncriptaSenha.java

public class EncriptaSenha {
    
    /** Creates a new instance of EncriptaSenha */
    public EncriptaSenha() {        
    }
    
     public static String encripta (String senha) {
         try    {
             MessageDigest digest = MessageDigest.getInstance("MD5");
             digest.update(senha.getBytes());
             BASE64Encoder encoder = new BASE64Encoder (); 
             return encoder.encode(digest.digest()); 
         }catch (NoSuchAlgorithmException ns) {
             ns.printStackTrace ();
             return senha;
         }
     }    
    
}

Autenticacao.java

String senha=""; 
String senha_banco=""; 

String login_form = request.getParameter("login"); // Pega o Login vindo do formulario 
String senha_form = request.getParameter("senha"); //Pega a senha vinda do formulario 


Class.forName("com.mysql.jdbc.Driver"); 
Connection con=DriverManager.getConnection 
("jdbc:mysql://end do banco","login banco","senha banco"); // Banco conectado ate aqui 

PreparedStatement stmt= con.prepareStatement("select login, senha from usuario where ?, ?"); // iniciando a criptografia do que foi digitado 

stmt.setString(1,login_form); 
stmt.setString(1,EncriptaSenha.encripta(senha_form));

ResultSet rs = stmt.executeQuery(); 

// faz validação

Fica bem mais fácil e prático.
Outra coisa, não aconselho vc a fazer isso no JSP, e sim criar as classes e cama-las nos JSP’s.

J

fsquadro

Muito obrigado!

O problema é que apareceu isso pra eu fazer, sendo que reconheço que não tenho a prática necessária para achar tão simples assim.

Eu fico atrapalhado na hora de chamar arquivos java dentro do jsp, por isso procurei uma forma de fazer direto.

Mas eu vou tudo isso que disse em consideração sim. Provavelmente mudarei meu codigo. Por enquanto quero q ele funcione para eu me preocupar com a criptografia dos arquivos e a gravação dos dados de arquivos upados no BD.

Sabe algo disso?

F

jlsan81 ,

O que você quer fazer com os arquivos, salva-los em banco? Salvar apenas o caminho, e o arquivo em uma pasta?
Deseja que quando salve o arquivo, salve outras informações sobre o arquivo, como uma descrição por exemplo.
O que em si, você deseja fazer! :slight_smile:

J

Terei uma pagina de UPLOAD, que salvará qq tipo de arquivo numa pasta.

Nesse mesmo codigo do upload, quero sejam extraídos dados do arquivo
(nome, tamanho, data do up, quem upou,etc) e gravados na tabela
arquivo, no BD.

Ah! E o arquivo tem que ser criptografado antes de salvado na pasta…

Criado 19 de abril de 2007
Ultima resposta 1 de mai. de 2007
Respostas 18
Participantes 5