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