[Resolvido]Guardar senha do Banco de Dados

Fala ai galera blz?
Estou começando a fazer um novo sisteminha…
no ultimo sistema que fiz eu deixava a senha do meu banco dentro do código do Java, assim só era possível alterar essa senha se eu entrasse no codigo fonte.
Eu estou procurando alguma maneira de guardar essa senha no programa de um modo que dê para edita-la mais tarde. E de um jeito que uma pessoa não logada acesse-o.
Queria fazer isso tanto pra senha como para os outros dados de conexão!

Alguém tem uma ideia?

Abração e t+ :smiley:

Tenho uma ideia :idea:

só não sei se é mto boa: e se vc tivesse um outro programa “auxiliar”, para guardar os dados referente a persistência, então vc poderia fazer seu programa “principal” receber os dados do programa “auxiliar” :slight_smile:

creio que desta maneira que sugeri, seus dados não ficaria tão vulneráveis, como por exemplo guardá-los em um arquivo (txt, config ou xml).

a sim… intendi, fazer um segundo programa com senha de superAdm para passar dados!!
parece ser uma ideia boa…

mas como que vou receber valores de outro programa? é possivel?

Eu faria um input que criptografaria a senha e salvaria num .txt com uma máscara de ID e assim sendo poderia salvar várias senhas.
Exemplo de output:
Banco1iulgsdfvbfsyu
Banco2kjlgasfyku
Banco3suokhsfadjc

Assim quando fosse logar a descriptografasse e no momento que trocasse alguma senha, buscaria pelo ID desejado e a alteraria no .txt.
Espero ter ajudado.

Frantic… gostei dessa ideia de criptografia… mas é possível reverter uma criptografia? uma vez criptografa é possivel apenas comparala, estou certo? ou existe outro modo?

É possível desfazer a criptografia desde que você saiba como foi feita. Tem alguns exemplos no Wikipedia. Logo ao logar o programa descriptografa e tenta fazer a conexão sem o conhecimento do usuário.

Olá,

Onde trabalho, fazemos da seguinte maneira (que é basicamente a mesma idéia do nosso amigo Frantic Avenger) …

Temos um programa que é usado para configurarmos o ODBC com seu usuário e senha… após confirmado, ele cria um arquivinho XML com as informações (nome do odbc, usuario e senha). Tudo criptografado com uma chave específica.

Na hora de fazermos a conexão, apenas lemos este arquivo e usamos a mesma chave de criptografia para obtermos as informações…

Neste caso, usamos uma criptografia própria do GeneXus, que permite criptografar E descriptografar… =P

Acredito que não funcionaria bem se usasse um método não reversível (MD2, por exemplo…)

Valeu

Bacana… não conhecia outros métodos…
Até hoje só usei a MD5 e a SHA1…

Vou dar uma olhada… agradeço pela ajuda!

Pois é, em um outro sistema que eu fiz, eu mesmo implementei a criptografiia de uma forma bem simples…)

Na encriptação eu ia pegando cada caractere da senha e, com seu número equivalente na tabela ASCII, eu somava digamos, o número 4 e salvava… Para voltar à senha original, era só fazer o contrário… subtrair 4 do valor do caractere…

É um meio simples de deixar as pessoas mais “ocupadas” (menos nerds) sem interesse de tentar quebrar a proteção né… =P

Valeu

bela ideia amigo… alguém sabe se existe alguma função ou biblioteca que faz isto? , já algumas funçoes que trabalham com MDR e SHA1

Faça essa que o haroflow disse e combine com a Criptografia Trilho de Ferrovia e acho que já está de bom tamanho.

[quote]As letras das posições pares e ímpares da frase, a ser criptografada, eram separadas em duas filas e então a fila das letras de posições pares era concatenada após a fila das letras de posições ímpares. Ex.

Frase original: Isto é um exemplo
Primeira fila: It meepo
Segunda fila: soéu xml
Frase criptografada: It meeposoéu xml[/quote]

Já que estamos falando de criptografia,

talvez este tópico tbm ajude :arrow: http://www.guj.com.br/java/51826-criptografia----java

Ai galera… nesse site tem um exemplo muito bom de criptografia simétrica…

Cripografia DES:

http://www.exampledepot.com/egs/javax.crypto/desstring.html

Ela resolve meu problema… obrigado a todos pela ajuda

Opa,

Tava fuçando aqui (essa conversa me inspirou… =P) e acabei fazendo uns testes aqui…

Acabei estendendo um pouco aquela idéia de somar um número ao valor do caractere, e misturei um Sin(i) para ficar ainda mais randômico… =P Para quem quiser dar uma olhada, tá ai:

Crypt.java (Classe que faz a codificação…)

[code]public class Crypt {
public static String encode(String frase) {
return encodeDecode(frase, ‘C’);
}

public static String decode(String frase) {
	return encodeDecode(frase, 'D');
}

private static String encodeDecode(String frase, char metodo) {
	String strRetorno = "";

	for(int i = 0; i < frase.length(); i++) {
		if(metodo == 'C') {
			strRetorno += String.valueOf(Character.toChars(frase.charAt(i) + (int) (Math.sin(i + 1) * 10)));
		} else if(metodo == 'D') {
			strRetorno += String.valueOf(Character.toChars(frase.charAt(i) - (int) (Math.sin(i + 1) * 10)));
		}
	}

	return strRetorno;
}

}[/code]

O uso dela é simples, é só chamar Crypt.encode(“palavra”) para codificar, e Crypt.decode(“palavra”) pra decodificar…

TesteCrypt.java (Classe teste)

[code]public class TesteCrypt {

public static void main(String args[]) {
	testa("aaaa");
	testa("bbbb");
}

public static void testa(String normal) {
	String cripto = Crypt.encode(normal);
	System.out.println("Palavra original = " + normal);
	System.out.println("Palavra criptografada = " + cripto);
	System.out.println("Palavra descriptografada = " + Crypt.decode(cripto));
}

}[/code]

Fiz também uma telinha pra brincar (já que estou começando com Java…)

Criptografia.java

[code]import javax.swing.;
import java.awt.
;
import java.awt.event.*;

public class Criptografia {

private static JFrame frame         = new JFrame("Criptografia");
private static JLabel lblNormal     = new JLabel("Normal");
private static JTextField txtNormal = new JTextField("aaaaaaaaaaaaaa");
private static JButton btnCD        = new JButton("C/D");
private static JLabel lblCripto     = new JLabel("Criptografado");
private static JTextField txtCripto = new JTextField("aaaaaaaaaaaaaa");

public static void main(String args[]) {
	frame.setSize(425, 65);
	frame.setLayout(new FlowLayout());
	frame.setResizable(false);
	frame.setLocationRelativeTo(null);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	btnCD.addActionListener(evtbtnCD);

	frame.add(lblNormal);
	frame.add(txtNormal);
	frame.add(btnCD);
	frame.add(lblCripto);
	frame.add(txtCripto);
	frame.setVisible(true);

	txtNormal.setText("");
	txtCripto.setText("");
}

private static ActionListener evtbtnCD = new ActionListener() {
	public void actionPerformed(ActionEvent e) {

		if(!txtNormal.getText().equals("") && txtCripto.getText().equals("")) {
			System.out.println("Criptografando...");
			txtCripto.setText(Crypt.encode(txtNormal.getText()));
		} else if(txtNormal.getText().equals("") && !txtCripto.getText().equals("")) {
			System.out.println("Descriptografando...");
			txtNormal.setText(Crypt.decode(txtCripto.getText()));
		}

	}
};

}[/code]

Para usá-la, é só preencher 1 dos dois campos, se preencheres a caixa de texto “Normal” e clicar no botão, ele vai criptografar. Se preencheres a caixa “Criptografado”, ele vai descriptografar =P

Dicas são bem vindas…

Valeu