viernes, 24 de febrero de 2012

Codificar fichero de texto

Este programa codifica con un método muy sencillo, y poco eficaz si la clave de codificación es corta, pero muy eficaz si es larga y se utilizan varias claves(intentare colgar otro programa que use varias claves). El programa, codifica un fichero de texto (extensión .txt) y el texto codificado lo guarda en un fichero que crea y se llama codificado.txt. Groso modo, el mecanismo consiste en sumar el valor de la letra a codificar y el de la letra que corresponda de la clave, usando valores del codigo ASCII. El programa resultante es el siguiente:

program encripta(input,output);
const
  min=32;
  max=126;
type
  NomFich=string[50];
  tpContador=1..maxint;
var
  nom:NomFich;
  codificado,decodificado:text;
  aux:char;
  contador:integer;

procedure Codificar(VAR a:char; c:tpContador);
  const
    clave='AquiSeIntroduceLaClave';{Aqui se pone el texto a usar como clave}
  var
    n:integer;
  begin {mirando en las tablas del codigo ASCII}
    if (ord(a)>=min) and (ord(a)<=max) then begin
      n:=((c-1) mod ord(clave[0])) + 1;
      {En la posicion 0 de la cadena clave se guarda su longitud}
      n:=(ord(clave[n])+ord(a)-(min*2)) mod (max-min+1);
      n:=n+min;
      a:=chr(n)
    end
  end;

begin
  write('Introduzca el nombre del fichero de texto a decodificar: ');{Se debe poner la extensión .txt}
  readln(nom);
  assign(decodificado,nom);
  assign(codificado,'codificado.txt');
  reset(decodificado); rewrite(codificado);
  contador:=0;
  while not eof(decodificado) do begin
    while not eoln(decodificado) do
    begin
      contador:=contador+1;
      read(decodificado,aux);
      Codificar(aux,contador);
      write(codificado,aux)
    end;
    readln(decodificado);writeln(codificado)
  end;
  close(codificado); close(decodificado);
  readln
end.


Si alguien tiene alguna duda o quiere detalles sobre el método que pregunte por aquí.
Salud.

No hay comentarios:

Publicar un comentario