Cifra de Vigenère versión Java
/**
* El programa obtiene el texto y la clave, elimina los espacios y los pasa a mayúsculas.
* No tiene en cuenta caracteres especiales (ç, ñ, tildes, etc...). Es feo y se podría
* haber hecho mejor... pero esta no es una clase de metodología de programación, ¿no? ;)
*/
package blog.crypto;
public class Vigenere {
private String eliminarEspacios( String st ) {
String _st = new String();
for (int i = 0; i < st.length(); i++) {
if ( st.charAt(i) != ' ' ) {
_st += st.charAt(i)+"";
}
}
return _st;
}
private void execute( String text , String clau ) throws Exception {
char[] _text = new char[ text.length() ];
char[] _clau = new char[ _text.length ];
//ciframos el mensaje
for ( int i = 0 ; i < text.length() ; i++ ) {
char t = text.charAt(i);
char c = clau.charAt( i % clau.length() );
int aux = (int)t;
int aux2 = (int)c;
aux -= 65;
aux2 -= 65;
_text[i] = (char)(((aux + aux2) % 26) + 65);
}
System.out.println("Missatge: " + text);
System.out.println("Clau: " + clau);
System.out.print("Criptograma: ");
for (int i = 0; i < _text.length; i++) {
System.out.print(""+_text[i]);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Vigenere v = new Vigenere();
try {
if ( args.length != 2 ) {
System.out.println("Uso: java blog.crypto.Vigenere \"texto\" clave");
System.exit(0);
}
v.execute( v.eliminarEspacios(args[0]).toUpperCase(), v.eliminarEspacios(args[1]).toUpperCase() );
}
catch ( Exception ex ) {
System.out.println("ERROR:: " + ex.toString());
}
}
}