[Java] Cifrado por Transposición
Publicado: 07 Oct 2014, 00:08
Implementcaión de un cifrado de transposición simple. Lo más curioso de esta técnica de cifrado es que es completamente independiente del alfabeto de entrada. En la implementación he usado el tipo byte, puesto que es el más utilizado.
Interfaz de cifrado:
[Cipher.java]
[Basic.java]
[Main.java]
Interfaz de cifrado:
[Cipher.java]
/*
* Transposition Cipher Interface
* Author: Slek (06/10/14)
*/
public interface Cipher {
public byte[] encrypt(byte[] m);
public byte[] decrypt(byte[] c);
}
Cifrado en sí:[Basic.java]
/*
* Basic Transposition Cipher
* Author: Slek (06/10/14)
*/
public class Basic implements Cipher {
@Override
public byte[] encrypt(byte[] m) {
int l = m.length;
int n = (l/2);
byte[] c = new byte[l];
int i = 0;
int j = n + (l % 2);
int k = 0;
while (i < n) {
c[k++] = m[i++];
c[k++] = m[j++];
}
if (k < l) c[k++] = m[i++];
return c;
}
@Override
public byte[] decrypt(byte[] c) {
int l = c.length;
int n = (l/2);
byte[] m = new byte[l];
int i = 0;
int j = n + (l % 2);
int k = 0;
while (i < n) {
m[i++] = c[k++];
m[j++] = c[k++];
}
if (k < l) m[i++] = c[k++];
return m;
}
}
Ejemplo:[Main.java]
public class Main {
public static void main(String[] args) {
String message = "esto es una prueba";
Cipher cipher = new Basic();
byte[] c;
System.out.println(new String(c = cipher.encrypt(message.getBytes())));
System.out.println(new String(cipher.decrypt(c)));
}
}
Un saludo!