lunes, 28 de abril de 2008

Algoritmo Para Cifrar Y Descifrar

En clases pasadas nos pusieron la siguiente tarea:

Realizar un script en Bash que haga lo siguiente:

  1. Que reciba como parametros el nombre (ruta) de un archivo, una clave y una opcion.
  2. De acuerdo a la opcion ingresada, el script cifrara o descifrara el mensaje del archivo ingresado.
  3. El algoritmos de cifrado y descifrado puede ser cualquiera (Recomendado algoritmos clasicos).
  4. La salida cifrada o descifrada ira a un archivo "output.txt" en el directorio actual.
El algoritmo de cifrado que escogi fue el de sustitucion (Sustituir un caracter por otro).

El script creado quedo asi:

#!/bin/sh
#Este programa tiene como funcion cifrar-descifrar por metodo de sustitucion (sustituye letras por numeros)
#Autor: Stiven Alexis Garcia mailto:sgarcia@misena.edu.co

var="output.txt"
if [ $# != "2" ]

then
echo "ERROR: El programa requiere de 2 parametros"
echo "Ejemplo:"
echo "./cifra.sh -c /tmp/file.txt (El tercer parametro es el nombre del archivo a cifrar/descifrar)"

echo "./cifra.sh -d /tmp/encrypted_file.txt (El tercer parametro es el archivo cifrado que queremos descifrar)"
echo "ayuda:"
echo " -c para cifrar"
echo " -d para descifrar"

exit

fi

if [ $1 = "-c" ] #Aqui le estamos diciendo que cuando el script se ejecute con el parametro "-c" cambie cada letra por un numero.
then

cp $2 output.txt

sed -i 's/a/_27_/g' output.txt # Cada vez que se utiliza el comando sed es para reemplazar un caracter por otro.
sed -i 's/b/_26_/g' output.txt
sed -i 's/c/_25_/g' output.txt

sed -i 's/d/_24_/g' output.txt
sed -i 's/e/_23_/g' output.txt

sed -i 's/f/_22_/g' output.txt
sed -i 's/g/_21_/g' output.txt

sed -i 's/h/_20_/g' output.txt
sed -i 's/i/_19_/g' output.txt
sed -i 's/j/_18_/g' output.txt

sed -i 's/k/_17_/g' output.txt
sed -i 's/l/_16_/g' output.txt

sed -i 's/m/_15_/g' output.txt

sed -i 's/n/_14_/g' output.txt

sed -i 's/o/_13_/g' output.txt
sed -i 's/p/_12_/g' output.txt
sed -i 's/q/_11_/g' output.txt
sed -i 's/r/_10_/g' output.txt

sed -i 's/s/_09_/g' output.txt

sed -i 's/t/_08_/g' output.txt

sed -i 's/u/_07_/g' output.txt
sed -i 's/v/_06_/g' output.txt
sed -i 's/w/_05_/g' output.txt
sed -i 's/x/_04_/g' output.txt
sed -i 's/y/_03_/g' output.txt

sed -i 's/z/_02_/g' output.txt
sed -i 's/A/_53_/g' output.txt

sed -i 's/B/_52_/g' output.txt
sed -i 's/C/_51_/g' output.txt

sed -i 's/D/_50_/g' output.txt

sed -i 's/E/_49_/g' output.txt

sed -i 's/F/_48_/g' output.txt

sed -i 's/G/_47_/g' output.txt

sed -i 's/H/_46_/g' output.txt

sed -i 's/I/_45_/g' output.txt
sed -i 's/J/_44_/g' output.txt

sed -i 's/K/_43_/g' output.txt

sed -i 's/L/_42_/g' output.txt

sed -i 's/M/_41_/g' output.txt

sed -i 's/N/_40_/g' output.txt
sed -i 's/O/_39_/g' output.txt

sed -i 's/P/_38_/g' output.txt
sed -i 's/Q/_37_/g' output.txt

sed -i 's/R/_36_/g' output.txt

sed -i 's/S/_35_/g' output.txt

sed -i 's/T/_34_/g' output.txt

sed -i 's/U/_33_/g' output.txt
sed -i 's/V/_32_/g' output.txt
sed -i 's/W/_31_/g' output.txt
sed -i 's/X/_30_/g' output.txt

sed -i 's/Y/_29_/g' output.txt

sed -i 's/Z/_28_/g' output.txt

sed -i 's/ /_54_/g' output.txt
elif [ $1 = "-d" ] #
Aqui le estamos diciendo que cuando el parametro sea "-d" cambie los numeros por letras.
then

sed -i 's/_27_/a/g' $2

sed -i 's/_26_/b/g' $2

sed -i 's/_25_/c/g' $2
sed -i 's/_24_/d/g' $2

sed -i 's/_23_/e/g' $2

sed -i 's/_22_/f/g' $2

sed -i 's/_21_/g/g' $2
sed -i 's/_20_/h/g' $2

sed -i 's/_19_/i/g' $2

sed -i 's/_18_/j/g' $2

sed -i 's/_17_/k/g' $2
sed -i 's/_16_/l/g' $2
sed -i 's/_15_/m/g' $2

sed -i 's/_14_/n/g' $2

sed -i 's/_13_/o/g' $2

sed -i 's/_12_/p/g' $2

sed -i 's/_11_/q/g' $2

sed -i 's/_10_/r/g' $2

sed -i 's/_09_/s/g' $2

sed -i 's/_08_/t/g' $2

sed -i 's/_07_/u/g' $2

sed -i 's/_06_/v/g' $2

sed -i 's/_05_/w/g' $2
sed -i 's/_04_/x/g' $2

sed -i 's/_03_/y/g' $2
sed -i 's/_02_/z/g' $2
sed -i 's/_53_/A/g' $2

sed -i 's/_52_/B/g' $2
sed -i 's/_51_/C/g' $2
sed -i 's/_50_/D/g' $2

sed -i 's/_49_/E/g' $2

sed -i 's/_48_/F/g' $2
sed -i 's/_47_/G/g' $2

sed -i 's/_46_/H/g' $2

sed -i 's/_45_/I/g' $2

sed -i 's/_44_/J/g' $2

sed -i 's/_43_/K/g' $2
sed -i 's/_42_/L/g' $2

sed -i 's/_41_/M/g' $2

sed -i 's/_40_/N/g' $2

sed -i 's/_39_/O/g' $2

sed -i 's/_38_/P/g' $2
sed -i 's/_37_/Q/g' $2

sed -i 's/_36_/R/g' $2

sed -i 's/_35_/S/g' $2

sed -i 's/_34_/T/g' $2
sed -i 's/_33_/U/g' $2

sed -i 's/_32_/V/g' $2

sed -i 's/_31_/W/g' $2

sed -i 's/_30_/X/g' $2

sed -i 's/_29_/Y/g' $2

sed -i 's/_28_/Z/g' $2

sed -i 's/_54_/ /g' $2

fi
echo " "

echo "OPERACION EXITOSA"

cat output.txt

echo " "

echo "Autor: Stiven Alexis Garcia "

Veamos el script en accion

Cifrado

Descifrado

Para comprender mejor este trabajo te aconsejo que leas teoria de comandos de Linux y de scripting en Bash.

No hay comentarios: