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
Código Delphi
[-]Function CompJencript(Accion: boolean; Cadena: String; Clave: integer;
Valor: boolean; N_mentiras, Mentir1, Mentir2, Mentir3: integer): string;
function JENCRIPT(Accion: boolean; Cadena: String; Clave: integer;
Valor: boolean; N_mentiras, Mentir1, Mentir2, Mentir3: integer): string;
var
JContador, Jcadena, JVaCadena, Iclave, Icuenta, JValormas: integer;
JFcuent1, JLie1, Jlie2, Jlie3, Jcuenclave, Jsaltar: integer;
Jcontador0, JvalorCaracter, JCantCaracteres: integer;
Jtexto, JCaracter: string;
jclave: array of integer;
begin
Jtexto := ''; Jcontador0 := 1; JCantCaracteres := 1; Jsaltar:=0; case N_mentiras of 1:
begin
Icuenta := Mentir1;
JLie1 := Mentir1; Jlie2 := 0; Jlie3 := 0; end;
2:
begin
Icuenta := Mentir1 + Mentir2;
JLie1 := Mentir1; Jlie2 := Mentir1 + Mentir2; Jlie3 := 0; end;
3:
begin
Icuenta := Mentir1 + Mentir2 + Mentir3;
JLie1 := Mentir1; Jlie2 := Mentir1 + Mentir2; Jlie3 := Mentir1 + Mentir2 + Mentir3; end;
end;
if (length(IntToStr(Clave)) >= 4) or (Length(IntToStr(Clave))<=10) then begin
Jcuenclave := length(IntToStr(Clave));
SetLength(jclave, Jcuenclave); for Iclave := 1 to Jcuenclave do
begin
jclave[Iclave] := StrToInt(Copy(IntToStr(Clave), Iclave, 1));
end;
if Accion = False then begin
for Jcadena := 1 to length(Cadena) do begin
if Jcadena=(length(Cadena)) then Continue; if JSaltar=1 then
begin
Jsaltar:=0;
Continue;
end;
JCaracter := Copy(Cadena, Jcadena, 1); JValormas := jclave[Jcontador0];
if Valor = False then begin
JvalorCaracter := Ord(JCaracter[1]) + JValormas; if JvalorCaracter > 255 then begin
JvalorCaracter :=JvalorCaracter-255; end;
end else
begin
JvalorCaracter := Ord(JCaracter[1]) - JValormas; if JvalorCaracter < 0 then begin
JvalorCaracter := 255 - JvalorCaracter; end;
end;
Jtexto := Jtexto + chr(JvalorCaracter);
Jcontador0 := Jcontador0 + 1; if Jcontador0 > Jcuenclave then
Jcontador0 := 1; if JLie1 = JCantCaracteres then Jsaltar:=1; if Jlie2 <> 0 then
begin
if Jlie2 = JCantCaracteres then Jsaltar:=1; end;
if Jlie3 <> 0 then
begin
if Jlie3 = JCantCaracteres then Jsaltar:=1; end;
JCantCaracteres := JCantCaracteres + 1; if JCantCaracteres > Icuenta then
JCantCaracteres := 1; end;
end else begin for Jcadena := 1 to length(Cadena) do begin
JCaracter := Copy(Cadena, Jcadena, 1); JValormas := jclave[Jcontador0];
if Valor = False then begin
JvalorCaracter := Ord(JCaracter[1]) - JValormas; if JvalorCaracter < 0 then begin
JvalorCaracter := 255 - JvalorCaracter; end;
end else
begin
JvalorCaracter := Ord(JCaracter[1]) + JValormas; if JvalorCaracter > 255 then begin
JvalorCaracter :=JvalorCaracter - 255; end;
end;
Jtexto := Jtexto + chr(JvalorCaracter);
Jcontador0 := Jcontador0 + 1; if Jcontador0 > Jcuenclave then
Jcontador0 := 1; if JLie1 = JCantCaracteres then
Jtexto := Jtexto + chr(Random(255)); if Jlie2 <> 0 then
begin
if Jlie2 = JCantCaracteres then
Jtexto := Jtexto + chr(Random(255)); end;
if Jlie3 <> 0 then
begin
if Jlie3 = JCantCaracteres then
Jtexto := Jtexto + chr(Random(255)); end;
JCantCaracteres := JCantCaracteres + 1; if JCantCaracteres > Icuenta then
JCantCaracteres := 1; end;
end;
end else ShowMessage( 'El valor de la clave no puede ser inferior a 4 ni superar los 10 digitos, corrijalo e intentelo de nuevo');
Result := Jtexto;
end;
var texCadena1, TexCadena2:String; TotalCaracter: integer;begin
if Accion=true then begin
while Length(Cadena)>Length(texCadena1) do begin texCadena1:=JENCRIPT(Accion,Cadena,Clave,Valor,N_mentiras,Mentir1,Mentir2,Mentir3);
end;
texCadena2:=JENCRIPT(False,TexCadena1,Clave,Valor,N_mentiras,Mentir1,Mentir2,Mentir3);
if TexCadena2=Cadena then Result:=texCadena1
else
begin
ShowMessage('Clave no permitida, ' + #13#10 +
'Puede ser que su clave no mantenga la integridad del texto,' + #13#10 +
'al desencriptarlo, por lo que mantenesmos el texto original.' + #13#10 +
'------------------------------------------------------------' + #13#10 +
'-Texto Original-----------------------------------------------------------' + #13#10 +
'['+Cadena+']'+ ' Total caracteres: '+IntToStr(Length(Cadena))+ #13#10 +
'-Texto Desencriptado-----------------------------------------------------------' + #13#10 +
'['+TexCadena2+']'+ ' Total caracteres: '+IntToStr(Length(Cadena))+ #13#10 +
'------------------------------------------------------------' + #13#10 +
'Intentelo con otra clave');
Result:=Cadena;
end;
end else
begin
TexCadena2:=JENCRIPT(Accion,Cadena,Clave,Valor,N_mentiras,Mentir1,Mentir2,Mentir3);
TotalCaracter:=Length(TexCadena2); Result:=Copy(texCadena2,1,TotalCaracter-1); end;
end;
En cuanto tenga un rato si me acuerdo, claro, intentare acortar el código y controlar excepciones (siempre mi tarea pendiente).