|
Mantener la información segura y oculta a la
vista de curiosos es una labor bastante compleja.
Si quieres adentrarte en este mundo te recomiendo que
leas bibliografía al respecto. En cualquier buscador
de la red podrás encontrar referencias al respecto.
En la bibliografía podrás ver métodos
que van desde el mítico Skytale pasando por transposición,
traslación, empaquetamiento, alfabetos reducidos,
eliminación de espacios en blanco, algoritmos
RSA y un largo etcétera.
Para una cuestión doméstica y sin entrar
en grandes complejidades,la manipulación de bits
es una opción aceptable y bastante sólida.
Todo depende del grado de ofuscamiento que quieras aplicar.
Algunas sugerencias pueden ser la combinación
de las siguientes.
Complemento a 1. (NOT): 00001111 -> 11110000
Complemento a 2. (NOT y sumar 1) 00001111 -> 11110001
Rotación de bits a la derecha / izquierda
Una idea puede consistir en fraccionar el mensaje en
porciones que se traten en un bucle y por cada caracter
en la porción aplicar n rotaciones a la izquierda
o a la derecha, o cpl1, cpl2, o lo que se te ocurra...
Las posibilidades son enormes.
Caracter 1: 10001110 -> 00011101 (1 rotación
a la izda de 1 bit)
Caracter 2: 00101011 -> 10101100 (2 rotaciones a
la izda de 1 bit)
Este es un pequeño ejemplo en RPGILE que espero
os sirva como orientación.
h fixnbr(*zoned) * d MSG S 1 DIM(50) * d letra s 1 * d longitud s 2s 0 * c *entry plist c parm prmopc 1 c parm prmmsg 50 c if %parms=2 c movea prmmsg MSG c eval longitud = %LEN(prmmsg) c z-add 1 rotar 1 0 * c 1 do longitud i 2 0 c testb '0' MSG(i) 30 c testb '1' MSG(i) 31 c testb '2' MSG(i) 32 c testb '3' MSG(i) 33 c testb '4' MSG(i) 34 c testb '5' MSG(i) 35 c testb '6' MSG(i) 36 c testb '7' MSG(i) 37 * C BITON '01234567' LETRA * c select c when prmopc = 'C' or prmopc='c' c exsr cifrar c when prmopc = 'D' or prmopc='d' c exsr descifrar c endsl * c add 1 rotar c if rotar > 3 c eval rotar = 1 c endif C EVAL MSG(I) = LETRA * c enddo * c movea msg prmmsg c endif * c move *on *inlr *----------------------------------------------------------------- * Cifrado de mensajes *----------------------------------------------------------------- c cifrar begsr * c select c when rotar = 1 * * una rotación a la izda c 30 bitoff '7' letra c 31 bitoff '0' letra c 32 bitoff '1' letra c 33 bitoff '2' letra c 34 bitoff '3' letra c 35 bitoff '4' letra c 36 bitoff '5' letra c 37 bitoff '6' letra * c when rotar = 2 * * dos rotaciones a la izda c 30 bitoff '6' letra c 31 bitoff '7' letra c 32 bitoff '0' letra c 33 bitoff '1' letra c 34 bitoff '2' letra c 35 bitoff '3' letra c 36 bitoff '4' letra c 37 bitoff '5' letra * c when rotar= 3 * * Tres rotaciones a la dcha c 30 bitoff '3' letra c 31 bitoff '4' letra c 32 bitoff '5' letra c 33 bitoff '6' letra c 34 bitoff '7' letra c 35 bitoff '0' letra c 36 bitoff '1' letra c 37 bitoff '2' letra * c endsl * c endsr ***************************************************************** * descifrar ***************************************************************** c descifrar begsr * c select c when rotar = 1 * * una rotación a la dcha c 30 bitoff '1' letra c 31 bitoff '2' letra c 32 bitoff '3' letra c 33 bitoff '4' letra c 34 bitoff '5' letra c 35 bitoff '6' letra c 36 bitoff '7' letra c 37 bitoff '0' letra * c when rotar = 2 * * dos rotaciones a la dcha c 30 bitoff '2' letra c 31 bitoff '3' letra c 32 bitoff '4' letra c 33 bitoff '5' letra c 34 bitoff '6' letra c 35 bitoff '7' letra c 36 bitoff '0' letra c 37 bitoff '1' letra * c when rotar= 3 * * tres rotaciones a la izda c 30 bitoff '5' letra c 31 bitoff '6' letra c 32 bitoff '7' letra c 33 bitoff '0' letra c 34 bitoff '1' letra c 35 bitoff '2' letra c 36 bitoff '3' letra c 37 bitoff '4' letra * c endsl * c endsr
Puedes ver el fuente aquí
Documento cedido por Carlos Vega
Marzo 2003. Modificado 8 de abril de 2003

|