Ir al contenido


Foto

Funcion JENCRIPT


  • Por favor identifícate para responder
6 respuestas en este tema

#1 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 09 octubre 2010 - 05:50

Hola compañeros me gustaría compartir con ustedes la siguiente función, para que la estudien la comenten y si pueden ayudarme a mejorarla, fabuloso

Aquí os dejo el código


delphi
  1. function JENCRIPT(Accion: boolean; Cadena: String; Clave: integer;
  2.   Valor: boolean; N_mentiras, Mentir1, Mentir2, Mentir3: integer): string;
  3. // -----------------------------------------------------------------------------
  4. // **************************************************[  FUNCION JENCRIPT ]******
  5. // Funcion Propia [J.L.G.T.]
  6. // Encipta o desencripta una cadena de texto según los valores introducidos
  7. // [Accion]      Se encarga si es TRUE de encriptar y si es FALSE de Desincriptar
  8. // [Cadena]      Texto para encriptar o desencriptar
  9. // [Clave]      Valor de la clave para la encriptacion, Este valor es numero y no absoluto
  10. // [Valor]      El valor puede ser positivo TRUE o negativo FALSE  la orden debe ser igual para
  11. // Enciptar  que para desencriiptar pero su funcionamiento es adverso
  12. // [N_Mentiras]  El numero de mentiras a introducir entre 1 y 3
  13. // [Mentir1]    Cantidad de caracteres para introducir un caracter falso  Valores entre 1 y 9
  14. // [Mentir2]    Cantidad de caracteres para introducir un caracter falso  Valores entre 1 y 9
  15. // [Mentir3]    Cantidad de caracteres para introducir un caracter falso  Valores entre 1 y 9
  16. // -----------------------------------------------------------------------------
  17.  
  18. // ---------------------------------------------------------------
  19. // ShowMessage( 'Caracter:=              '+ JCaracter+      #13#10  +      //Para comprobar
  20. // 'Valor Ordinal:=          '+  IntToStr(Ord(JCaracter[1]))+  #13#10 +
  21. // 'Valor de Clave:=        '+  IntToStr(JValormas)+  #13#10 +
  22. // 'Valor Jcontador0:=      '+  IntToStr(Jcontador0)+  #13#10 +
  23. // 'Valor JCantCaracteres:=  '+  IntToStr(JCantCaracteres)+  #13#10 +
  24. // 'Valor JuenClave:=        '+  IntToStr(Jcuenclave)+  #13#10 +
  25. // '----------------------------------------------'+  #13#10 +
  26. // 'Valor de Clave:=        '+  IntToStr(jclave[1])+  #13#10 +
  27. // 'Valor de Clave:=        '+  IntToStr(jclave[2])+  #13#10 +
  28. // 'Valor de Clave:=        '+  IntToStr(jclave[3])+  #13#10 +
  29. // 'Valor de Clave:=        '+  IntToStr(jclave[4])+  #13#10 +
  30. // 'Valor de Clave:=        '+  IntToStr(jclave[5])+  #13#10 +
  31. // 'Valor de Clave:=        '+  IntToStr(jclave[6]));
  32. // ----------------------------------------------------------------
  33. var
  34.   JContador, Jcadena, JVaCadena, Iclave, Icuenta, JValormas: integer;
  35.   JFcuent1, JLie1, Jlie2, Jlie3, Jcuenclave, Jsaltar: integer;
  36.   Jcontador0, JvalorCaracter, JCantCaracteres: integer;
  37.   Jtexto, JCaracter: string;
  38.   jclave: array of integer;
  39. begin
  40.   Jtexto := ''; // Para que siempre tenga que devolver la funcion
  41.   Jcontador0 := 1; // Encargado de asignar los controles de clave
  42.   JCantCaracteres := 1; // PAra poder comprobar caracteres falsos
  43.   Jsaltar:=0;    //Para hacer saltos en el For
  44.   case N_mentiras of // Para optener el numero de caracteres total en el control de caracteres falsos
  45.     1:
  46.       begin
  47.         Icuenta := Mentir1;
  48.         JLie1 := Mentir1; // Para saber si hay que introducir un carater falso en el Mentir1
  49.         Jlie2 := 0; // Para no introducir caracter falso
  50.         Jlie3 := 0; // Para no introducir caracter falso
  51.       end;
  52.     2:
  53.       begin
  54.         Icuenta := Mentir1 + Mentir2;
  55.         JLie1 := Mentir1; // PAra saber si hay que introducir un carater falso en el Mentir1
  56.         Jlie2 := Mentir1 + Mentir2; // PAra saber si hay que introducir un carater falso en el Mentir2
  57.         Jlie3 := 0; // Para no introducir caracter falso
  58.       end;
  59.     3:
  60.       begin
  61.         Icuenta := Mentir1 + Mentir2 + Mentir3;
  62.         JLie1 := Mentir1; // Para saber si hay que introducir un carater falso en el Mentir1
  63.         Jlie2 := Mentir1 + Mentir2; // Para saber si hay que introducir un carater falso en el Mentir2
  64.         Jlie3 := Mentir1 + Mentir2 + Mentir3; // Para saber si hay que introducir un carater falso en el Mentir3
  65.       end;
  66.   end;
  67.   if length(IntToStr(Clave)) <= 10 then // Comprobamos que no pase de diez digitos la clave
  68.   begin
  69.     Jcuenclave := length(IntToStr(Clave));
  70.     SetLength(jclave, Jcuenclave); // Para asignar el tamaño del array dinamico
  71.     for Iclave := 1 to Jcuenclave do
  72.     begin
  73.       jclave[Iclave] := StrToInt(Copy(IntToStr(Clave), Iclave, 1));
  74.       // A cada parte del array su valor
  75.     end;
  76.  
  77.     if Accion = False then // Para desencriptar    *********************************************************
  78.     begin
  79.       for Jcadena := 1 to length(Cadena)-1 do // Empezamos el encriptado
  80.       begin
  81.         if Jcadena=(length(Cadena)-1) then Continue;  //El ultimo Caracter crea un caracter de mas ?? con esto lo soluciono
  82.         if JSaltar=1 then
  83.         begin
  84.           Jsaltar:=0;
  85.           Continue;
  86.         end;
  87.         JCaracter := Copy(Cadena, Jcadena, 1); // Cogemos un unico caracter
  88.         JValormas := jclave[Jcontador0];
  89.         if Valor = False then // Para valor en negativo
  90.         begin
  91.           JvalorCaracter := Ord(JCaracter[1]) + JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  92.           if JvalorCaracter > 255 then // Comprobamos que no se pase del valor mínimo ASII
  93.           begin
  94.             JvalorCaracter :=JvalorCaracter-255;          // La diferencia sera el nuevo valor
  95.           end;
  96.         end else
  97.         begin
  98.           JvalorCaracter := Ord(JCaracter[1]) - JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  99.           if JvalorCaracter < 0 then // Comprobamos que no se pase del valor mínimo ASII
  100.           begin
  101.             JvalorCaracter := 255 - JvalorCaracter;          // La diferencia sera el nuevo valor
  102.           end;
  103.         end;
  104.         Jtexto := Jtexto + chr(JvalorCaracter);
  105.         Jcontador0 := Jcontador0 + 1; // Sumamos para el siguiente valor de clave
  106.         if Jcontador0 > Jcuenclave then
  107.           Jcontador0 := 1; // Si el Jcontador0 es mayor que el numero de digitos clave lo reiniciamos
  108.         if JLie1 = JCantCaracteres then Jsaltar:=1; // Comprobamos si hay que eliminar un caracter falso segun Mentir1
  109.         if Jlie2 <> 0 then
  110.         begin
  111.           if Jlie2 = JCantCaracteres then Jsaltar:=1;// Comprobamos si hay que eliminar un caracter falso segun Mentir2
  112.         end;
  113.         if Jlie3 <> 0 then
  114.         begin
  115.           if Jlie3 = JCantCaracteres then Jsaltar:=1; // Comprobamos si hay que eliminar un caracter falso segun Mentir3
  116.         end;
  117.         JCantCaracteres := JCantCaracteres + 1; // Sumamos 1 a este contador
  118.         if JCantCaracteres > Icuenta then
  119.           JCantCaracteres := 1; // Si el contador sobrepasa el numero de caracteres de la suma de los mentir lo pone de nuevo en 1
  120.       end;
  121.     end  else // PAra encriptar ********************************************************
  122.     begin // Si es enciptado
  123.       for Jcadena := 1 to length(Cadena) do // Empezamos el encriptado
  124.       begin
  125.         JCaracter := Copy(Cadena, Jcadena, 1); // Cogemos un unico caracter
  126.         JValormas := jclave[Jcontador0];
  127.         if Valor = False then // Para valor en negativo
  128.         begin
  129.           JvalorCaracter := Ord(JCaracter[1]) - JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  130.           if JvalorCaracter < 0 then // Comprobamos que no se pase del valor mínimo ASII
  131.           begin
  132.             JvalorCaracter := 255 - JvalorCaracter;          // La diferencia sera el nuevo valor
  133.           end;
  134.         end else
  135.         begin
  136.           JvalorCaracter := Ord(JCaracter[1]) + JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  137.           if JvalorCaracter > 255 then // Comprobamos que no se pase del valor mínimo ASII
  138.           begin
  139.             JvalorCaracter :=JvalorCaracter - 255;          // La diferencia sera el nuevo valor
  140.           end;
  141.         end;
  142.         Jtexto := Jtexto + chr(JvalorCaracter);
  143.         Jcontador0 := Jcontador0 + 1; // Sumamos para el siguiente valor de clave
  144.         if Jcontador0 > Jcuenclave then
  145.           Jcontador0 := 1; // Si el Jcontador0 es mayor que el numero de digitos clave lo reiniciamos
  146.         if JLie1 = JCantCaracteres then
  147.           Jtexto := Jtexto + chr(Random(255)); // Comprobamos si hay que introducir un caracter falso segun Mentir1
  148.         if Jlie2 <> 0 then
  149.         begin
  150.           if Jlie2 = JCantCaracteres then
  151.             Jtexto := Jtexto + chr(Random(255)); // Comprobamos si hay que introducir un caracter falso segun Mentir2
  152.         end;
  153.         if Jlie3 <> 0 then
  154.         begin
  155.           if Jlie3 = JCantCaracteres then
  156.             Jtexto := Jtexto + chr(Random(255)); // Comprobamos si hay que introducir un caracter falso segun Mentir3
  157.         end;
  158.         JCantCaracteres := JCantCaracteres + 1; // Sumamos 1 a este contador
  159.         if JCantCaracteres > Icuenta then
  160.           JCantCaracteres := 1; // Si el contador sobrepasa el numero de caracteres de la suma de los mentir lo pone de nuevo en 1
  161.       end;
  162.     end;
  163.   end  else  ShowMessage( 'El valor de la clave no puede superar diez digitos, corrijalo e intentelo de nuevo');
  164.   Result := Jtexto;
  165. end;



  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 09 octubre 2010 - 07:36

Saludos.

A pesar de que el código tiene comentada algunas cosas, creo que debes de darnos una descripción más profunda de lo que hace la función, que persigues y que esperas para nosotros entender tu objetivo y así brindarte mejores ideas.
  • 0

#3 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 09 octubre 2010 - 07:49

La verdad no entiendo el objetivo de algunos parámetros, hay partes de código que se pueden resumir, recuerda que una cadena string de por sí ya es un vector.

Por otra parte, la corrí y usando un punto de quiebre analicé paso a paso lo que hace el proceso de cifrar, se generan los caracteres pero no pude mostrarlos en pantalla, solo me salió el primero... no sé a que se deba  ^o|

Otra cosa, introduces caracteres falsos mediante la función random, entonces ¿cómo compruebas que la cadena introducida desifra el texto original?

Por lo demás, es un buen ejercicio algorítmico  :)


Saludos!
  • 0

#4 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 09 octubre 2010 - 08:37

Bueno intentare dar una descripción detallada de lo que pretendo, los parámetros vienen ya en la cabecera una breve descripción, en cuanto a lo que pretendo, es lo siguiente, se puede encriptar/des encriptar un texto mediante un algoritmo numérico, sabiendo el valor absoluto de un valor numérico, entonces lo que pretendo es romper este sistema.

En un sistema normal, el encriptado solo depende de un número o clave de desencriptación, variable en tamaño, pero que por lo general se reduce a unos centenar de posibilidades, aquí es donde varia mi sistema ya que el primer paso, cada carácter va a variar un número de códigos ascii, según el valor de la clave a que pertenezca, repitiendo secuencial mente esta cadena.

En segundo lugar puedo hacer la búsqueda en subida o en bajada, lo que eleva las posibilidades de claves validas.

Por ultimo es sistema de caracteres falsos, viene de mi época militar en transmisiones de la marina, usábamos un sistema que te permite añadir cada x caracteres insertar un código que no se lee al descifrarlo, he intentado mejorarlo, mediante un sistema múltiple de caracteres falsos, hay que tener en cuenta, lo siguiente:

N_mentiras, nos dice cuantos sistemas de mentira vamos a introducir.

Mentir1..3 es la cantidad de caracteres que dejamos pasar antes de meter un carácter falso

O explicado de otra manera si tenemos el texto


Damían muerde al perro


Con clave 12365458, valor Positivo, N_mentiras en 2 (2 sistemas de mentiras), Mentir1 en 3 y mentir2 en 4

  seria tanto como exponerlo de la siguiente manera

Dam@ían &mue@rde &al @perr&o             

123@6545&812@3654&581@2365&4



Donde @= Mentir1 y &=Mentir2, Claro al descodificar como el tamaño del texto ha cambiado, debemos controlar donde están los caracteres falsos y eliminarlos.

De todas maneras hay que pensar que la desarrolle esta mañana, seguro que tiene bugs, y que se podrá acortar el texto, por eso quiero que la prueben y me digan o corrijan ustedes mismos.

En cuanto matemáticamente, cada valor que la hace variar (valor, Mentir..3) a parte de la clave claro, exponencial la dificultada de descifrado. ya no solo por el algoritmo numérico, sino por la creación de caracteres adicionales.

Espero haber dejado un poco mas claro el asunto.



  • 0

#5 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 09 octubre 2010 - 08:43

Os adjunto una pequeña demos de su uso

Archivos adjuntos


  • 0

#6 felipe

felipe

    Advanced Member

  • Administrador
  • 3.283 mensajes
  • LocationColombia

Escrito 09 octubre 2010 - 09:00

Os adjunto una pequeña demos de su uso


Ahora si lo pude ver funcionando (y)... no sé poque no me corrió bien

El asunto esta interesante, creo que sería solo cosa de optimizar el código :)


Saludos!
  • 0

#7 Desart

Desart

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 715 mensajes
  • LocationEspaña

Escrito 12 octubre 2010 - 09:03

Hola compañeros he encontrado un par de errores, como claves que empiezen por cero o de muy pocos número, he intentado corregirlo dentro de la función, pero al final opte por crear una funcion que compare la funcion jemcript y que esta última este integrada en la nueva, (como siempre creo que lio las cosas), asi que aquí esta el código


delphi
  1. FunctionCompJenCript(Accion: boolean; Cadena: String; Clave: integer;
  2.   Valor: boolean; N_mentiras, Mentir1, Mentir2, Mentir3: integer): string;
  3. function JENCRIPT(Accion: boolean; Cadena: String; Clave: integer;
  4.   Valor: boolean; N_mentiras, Mentir1, Mentir2, Mentir3: integer): string;
  5. // -----------------------------------------------------------------------------
  6. // **************************************************[  FUNCION JENCRIPT ]******
  7. // Funcion Propia [J.L.G.T.]
  8. // Encipta o desencripta una cadena de texto según los valores introducidos
  9. // [Accion]      Se encarga si es TRUE de encriptar y si es FALSE de Desincriptar
  10. // [Cadena]      Texto para encriptar o desencriptar
  11. // [Clave]      Valor de la clave para la encriptacion, Este valor es numero y no absoluto de 4 a 10 digitos
  12. // [Valor]      El valor puede ser positivo TRUE o negativo FALSE  la orden debe ser igual para
  13. // Enciptar  que para desencriiptar pero su funcionamiento es adverso
  14. // [N_Mentiras]  El numero de mentiras a introducir entre 1 y 3
  15. // [Mentir1]    Cantidad de caracteres para introducir un caracter falso  Valores entre 1 y 9
  16. // [Mentir2]    Cantidad de caracteres para introducir un caracter falso  Valores entre 1 y 9
  17. // [Mentir3]    Cantidad de caracteres para introducir un caracter falso  Valores entre 1 y 9
  18. // -----------------------------------------------------------------------------
  19.  
  20. // ---------------------------------------------------------------
  21. // ShowMessage( 'Caracter:=              '+ JCaracter+      #13#10  +      //Para comprobar
  22. // 'Valor Ordinal:=          '+  IntToStr(Ord(JCaracter[1]))+  #13#10 +
  23. // 'Valor de Clave:=        '+  IntToStr(JValormas)+  #13#10 +
  24. // 'Valor Jcontador0:=      '+  IntToStr(Jcontador0)+  #13#10 +
  25. // 'Valor JCantCaracteres:=  '+  IntToStr(JCantCaracteres)+  #13#10 +
  26. // 'Valor JuenClave:=        '+  IntToStr(Jcuenclave)+  #13#10 +
  27. // '----------------------------------------------'+  #13#10 +
  28. // 'Valor de Clave:=        '+  IntToStr(jclave[1])+  #13#10 +
  29. // 'Valor de Clave:=        '+  IntToStr(jclave[2])+  #13#10 +
  30. // 'Valor de Clave:=        '+  IntToStr(jclave[3])+  #13#10 +
  31. // 'Valor de Clave:=        '+  IntToStr(jclave[4])+  #13#10 +
  32. // 'Valor de Clave:=        '+  IntToStr(jclave[5])+  #13#10 +
  33. // 'Valor de Clave:=        '+  IntToStr(jclave[6]));
  34. // ----------------------------------------------------------------
  35. var
  36.   JContador, Jcadena, JVaCadena, Iclave, Icuenta, JValormas: integer;
  37.   JFcuent1, JLie1, Jlie2, Jlie3, Jcuenclave, Jsaltar: integer;
  38.   Jcontador0, JvalorCaracter, JCantCaracteres: integer;
  39.   Jtexto, JCaracter: string;
  40.   jclave: array of integer;
  41. begin
  42.   Jtexto := ''; // Para que siempre tenga que devolver la funcion
  43.   Jcontador0 := 1; // Encargado de asignar los controles de clave
  44.   JCantCaracteres := 1; // PAra poder comprobar caracteres falsos
  45.   Jsaltar:=0;    //Para hacer saltos en el For
  46.   case N_mentiras of // Para optener el numero de caracteres total en el control de caracteres falsos
  47.     1:
  48.       begin
  49.         Icuenta := Mentir1;
  50.         JLie1 := Mentir1; // Para saber si hay que introducir un carater falso en el Mentir1
  51.         Jlie2 := 0; // Para no introducir caracter falso
  52.         Jlie3 := 0; // Para no introducir caracter falso
  53.       end;
  54.     2:
  55.       begin
  56.         Icuenta := Mentir1 + Mentir2;
  57.         JLie1 := Mentir1; // PAra saber si hay que introducir un carater falso en el Mentir1
  58.         Jlie2 := Mentir1 + Mentir2; // PAra saber si hay que introducir un carater falso en el Mentir2
  59.         Jlie3 := 0; // Para no introducir caracter falso
  60.       end;
  61.     3:
  62.       begin
  63.         Icuenta := Mentir1 + Mentir2 + Mentir3;
  64.         JLie1 := Mentir1; // Para saber si hay que introducir un carater falso en el Mentir1
  65.         Jlie2 := Mentir1 + Mentir2; // Para saber si hay que introducir un carater falso en el Mentir2
  66.         Jlie3 := Mentir1 + Mentir2 + Mentir3; // Para saber si hay que introducir un carater falso en el Mentir3
  67.       end;
  68.   end;
  69.   if (length(IntToStr(Clave)) >= 4) or (Length(IntToStr(Clave))<=10) then // Comprobamos que no pase de diez digitos la clave
  70.   begin
  71.     Jcuenclave := length(IntToStr(Clave));
  72.     SetLength(jclave, Jcuenclave); // Para asignar el tamaño del array dinamico
  73.     for Iclave := 1 to Jcuenclave do
  74.     begin
  75.       jclave[Iclave] := StrToInt(Copy(IntToStr(Clave), Iclave, 1));
  76.       // A cada parte del array su valor
  77.     end;
  78.  
  79.     if Accion = False then // Para desencriptar    *********************************************************
  80.     begin
  81.       for Jcadena := 1 to length(Cadena) do // Empezamos el encriptado
  82.       begin
  83.         if Jcadena=(length(Cadena)) then Continue;  //El ultimo Caracter crea un caracter de mas ?? con esto lo soluciono
  84.         if JSaltar=1 then
  85.         begin
  86.           Jsaltar:=0;
  87.           Continue;
  88.         end;
  89.         JCaracter := Copy(Cadena, Jcadena, 1); // Cogemos un unico caracter
  90.         JValormas := jclave[Jcontador0];
  91.         if Valor = False then // Para valor en negativo
  92.         begin
  93.           JvalorCaracter := Ord(JCaracter[1]) + JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  94.           if JvalorCaracter > 255 then // Comprobamos que no se pase del valor mínimo ASII
  95.           begin
  96.             JvalorCaracter :=JvalorCaracter-255;          // La diferencia sera el nuevo valor
  97.           end;
  98.         end else
  99.         begin
  100.           JvalorCaracter := Ord(JCaracter[1]) - JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  101.           if JvalorCaracter < 0 then // Comprobamos que no se pase del valor mínimo ASII
  102.           begin
  103.             JvalorCaracter := 255 - JvalorCaracter;          // La diferencia sera el nuevo valor
  104.           end;
  105.         end;
  106.         Jtexto := Jtexto + chr(JvalorCaracter);
  107.         Jcontador0 := Jcontador0 + 1; // Sumamos para el siguiente valor de clave
  108.         if Jcontador0 > Jcuenclave then
  109.           Jcontador0 := 1; // Si el Jcontador0 es mayor que el numero de digitos clave lo reiniciamos
  110.         if JLie1 = JCantCaracteres then Jsaltar:=1; // Comprobamos si hay que eliminar un caracter falso segun Mentir1
  111.         if Jlie2 <> 0 then
  112.         begin
  113.           if Jlie2 = JCantCaracteres then Jsaltar:=1;// Comprobamos si hay que eliminar un caracter falso segun Mentir2
  114.         end;
  115.         if Jlie3 <> 0 then
  116.         begin
  117.           if Jlie3 = JCantCaracteres then Jsaltar:=1; // Comprobamos si hay que eliminar un caracter falso segun Mentir3
  118.         end;
  119.         JCantCaracteres := JCantCaracteres + 1; // Sumamos 1 a este contador
  120.         if JCantCaracteres > Icuenta then
  121.           JCantCaracteres := 1; // Si el contador sobrepasa el numero de caracteres de la suma de los mentir lo pone de nuevo en 1
  122.       end;
  123.     end  else // PAra encriptar ********************************************************
  124.     begin // Si es enciptado
  125.       for Jcadena := 1 to length(Cadena) do // Empezamos el encriptado
  126.       begin
  127.         JCaracter := Copy(Cadena, Jcadena, 1); // Cogemos un unico caracter
  128.         JValormas := jclave[Jcontador0];
  129.         if Valor = False then // Para valor en negativo
  130.         begin
  131.           JvalorCaracter := Ord(JCaracter[1]) - JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  132.           if JvalorCaracter < 0 then // Comprobamos que no se pase del valor mínimo ASII
  133.           begin
  134.             JvalorCaracter := 255 - JvalorCaracter;          // La diferencia sera el nuevo valor
  135.           end;
  136.         end else
  137.         begin
  138.           JvalorCaracter := Ord(JCaracter[1]) + JValormas; // Pasamos a su valor AscII y le añadimos el Valor númerico de la clave que le pertenezca
  139.           if JvalorCaracter > 255 then // Comprobamos que no se pase del valor mínimo ASII
  140.           begin
  141.             JvalorCaracter :=JvalorCaracter - 255;          // La diferencia sera el nuevo valor
  142.           end;
  143.         end;
  144.         Jtexto := Jtexto + chr(JvalorCaracter);
  145.         Jcontador0 := Jcontador0 + 1; // Sumamos para el siguiente valor de clave
  146.         if Jcontador0 > Jcuenclave then
  147.           Jcontador0 := 1; // Si el Jcontador0 es mayor que el numero de digitos clave lo reiniciamos
  148.         if JLie1 = JCantCaracteres then
  149.           Jtexto := Jtexto + chr(Random(255)); // Comprobamos si hay que introducir un caracter falso segun Mentir1
  150.         if Jlie2 <> 0 then
  151.         begin
  152.           if Jlie2 = JCantCaracteres then
  153.             Jtexto := Jtexto + chr(Random(255)); // Comprobamos si hay que introducir un caracter falso segun Mentir2
  154.         end;
  155.         if Jlie3 <> 0 then
  156.         begin
  157.           if Jlie3 = JCantCaracteres then
  158.             Jtexto := Jtexto + chr(Random(255)); // Comprobamos si hay que introducir un caracter falso segun Mentir3
  159.         end;
  160.         JCantCaracteres := JCantCaracteres + 1; // Sumamos 1 a este contador
  161.         if JCantCaracteres > Icuenta then
  162.           JCantCaracteres := 1; // Si el contador sobrepasa el numero de caracteres de la suma de los mentir lo pone de nuevo en 1
  163.       end;
  164.     end;
  165.   end  else  ShowMessage( 'El valor de la clave no puede ser inferior a 4 ni  superar los 10 digitos, corrijalo e intentelo de nuevo');
  166.   Result := Jtexto;
  167. end;
  168. var  texCadena1,            //Recogera el encriptado
  169.       TexCadena2:String;    //Recogera el Desencriptado
  170.       TotalCaracter: integer;//Para corregir en la salida
  171. begin
  172.     if Accion=true then  //Si la orden es encriptar
  173.     begin
  174.           while Length(Cadena)>Length(texCadena1) do  //Si La longitud de cadena es mayor que la longitud resultante
  175.           begin  //Este while se ha puesto ya que me he encontrado que de vez en cuado no se por que no recoge todad la cadena al encriptar
  176.             texCadena1:=JENCRIPT(Accion,Cadena,Clave,Valor,N_mentiras,Mentir1,Mentir2,Mentir3);
  177.           end;
  178.           texCadena2:=JENCRIPT(False,TexCadena1,Clave,Valor,N_mentiras,Mentir1,Mentir2,Mentir3);
  179.           if TexCadena2=Cadena then Result:=texCadena1
  180.                               else
  181.                               begin
  182.                                     ShowMessage('Clave no permitida, ' + #13#10  +
  183.                                                 'Puede ser que su clave no mantenga la integridad del texto,' + #13#10  +
  184.                                                 'al desencriptarlo, por lo que mantenesmos el texto original.' + #13#10  +
  185.                                                 '------------------------------------------------------------' + #13#10  +
  186.                                                 '-Texto Original-----------------------------------------------------------' + #13#10  +
  187.                                                 '['+Cadena+']'+ ' Total caracteres: '+IntToStr(Length(Cadena))+ #13#10  +
  188.                                                 '-Texto Desencriptado-----------------------------------------------------------' + #13#10  +
  189.                                                 '['+TexCadena2+']'+ ' Total caracteres: '+IntToStr(Length(Cadena))+ #13#10  +
  190.                                                 '------------------------------------------------------------' + #13#10  +
  191.                                                 'Intentelo con otra clave');
  192.                                     Result:=Cadena;
  193.                               end;
  194.  
  195.     end else
  196.         begin
  197.             TexCadena2:=JENCRIPT(Accion,Cadena,Clave,Valor,N_mentiras,Mentir1,Mentir2,Mentir3);
  198.             TotalCaracter:=Length(TexCadena2);        //Contamo esl total de caracteres
  199.             Result:=Copy(texCadena2,1,TotalCaracter-1); //Devolvemos el resultado menos el último caracter que es un cuadrado
  200.         end;
  201. end;




En cuanto tenga un rato si me acuerdo, claro, intentare acortar el código y controlar excepciones (siempre mi tarea pendiente).
  • 0




IP.Board spam blocked by CleanTalk.