Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Encryptacion con ORD (https://www.clubdelphi.com/foros/showthread.php?t=90297)

gdlrinfo 13-05-2016 21:29:00

Encryptacion con ORD
 
Estimados tengo una gran duda me estoy volviendo loco el tema es asi tengo un texto que tiene una serie de caracteres encriptados que lo encripto con la función ORD pero por ejemplo cuando encripta a la letra C me la pone como el símbolo œ ahora bien al desencriptar me trae uno símbolos raros lo cual antes lo hacia bien lo que noto que el problema esta al usar el not dejo un ejemplo!!!!
Código Delphi [-]
var
  CharIndex : integer;
begin
  Result := Value;
  for CharIndex := 1 to Length(Value) do
    Result[CharIndex] := chr(not(ord(Value[CharIndex])));
end;

atte. Gracias como siempre

Casimiro Notevi 13-05-2016 21:50:42

No olvides poner las etiquetas para código, gracias :)

gdlrinfo 13-05-2016 23:24:04

Perdon
 
Perdon se me paso :C

BDWONG 14-05-2016 01:19:52

Hola que version de delphi estas utilizando?
Hice unas pruebas en delphi 2010 y no tuve ningun problema

Código Delphi [-]
function cifrar_Descifrar(const value:string):string;
var
CharIndex:Integer;
begin
  Result := Value;
  for CharIndex := 1 to Length(Value) do
    Result[CharIndex] := chr(not(ord(Value[CharIndex])));
end;


var
msg:string;
begin
   msg:='Hello world C';

   msg:=cifrar_Descifrar(msg);
   Writeln(msg);

   msg:=cifrar_Descifrar(msg);
   Writeln(msg);

   Readln;
end.

Saludos

mamcx 14-05-2016 22:34:06

Cita:

Empezado por gdlrinfo (Mensaje 505207)
lo encripto con la función ORD

Usar ORD no es encriptacion, o mejor dicho, lo es de la peor forma posible. NUNCA uses algo "inventado" por ti para estos temas, siempre usar una libreria hecha por criptografos.

BDWONG 14-05-2016 23:41:13

@mamcx No entiendo que tiene de malo que se haga algun algoritmo que cifro o descifre una cadena? ademas no esta especificando para que o porque lo esta haciendolo, asi que no comprendo tu comentario.

Casimiro Notevi 15-05-2016 01:30:21

Creo que lo dice porque con ord es tan evidente el resultado que más que "encriptación", se le podría llamar "intento de ocultación", pero no es nada serio si se quiere ocultar realmente una información.

mamcx 15-05-2016 03:41:12

Cita:

Empezado por BDWONG (Mensaje 505233)
asi que no comprendo tu comentario.

Lo hice porque si el objetivo es realmente encriptar, el uso de ORD es muy errado, y su uso en cualquier ambito donde se requiera seguridad es totalmente inutil. Ademas, es mas correcto decir que eso es un "encoding".

Probablemente se esta usando "encriptacion" en un tono muy liberal, pero es que me acuerdo que esa fue mi primera forma de "ocultar" claves.... ;)

gdlrinfo 16-05-2016 22:21:19

Buenas
 
Buenas Gracias por los comentarios en si no se necesita una seguridad importante solo es para que no se vea como esta escrita la frase el problema en verdad es que esta guardada en un XML y es un programa antiguo bien ahora cuando levanto por ejemplo el nombre que es Jorge me trae esta simbología (ユミヘリレ) y antes lo que estaba guardado en el XML era (Œšœž) entonces el problema es que hoy en día cuando lo codifica sale (ユミヘリレ) y antes salía (Œšœž).- Se entiende es como que ahora no encuentra la misma simbología que antes .. atte. Gracias como siempre

Héctor Randolph 16-05-2016 22:55:54

Si vas a guardar esa cadena en un archivo XML, seguramente tendrás problemas de codificación.

Al aplicar tu función de encriptación el resultado puede contener caracteres no imprimibles y este puede ser el origen del problema al enviarlo a un archivo XML.

Lo más recomendable en este caso es que al resultado de tu encriptación le apliques adicionalmente la codificación Base64, el resultado será una cadena en la cuál todos los caracteres son imprimibles y en un rango seguro para compartir información sobre archivos XML. Después, cuando quieras obtener el contenido de la variable desde tu archivo XML debes aplicar las funciones a la inversa, es decir, primero descodificar Base64 y el resultado va a tu función inversa de cripto para obtener la cadena original.

Te recomiendo que busques en los foros por alguna función que codifique y descodifique Base64.

Saludos

gdlrinfo 16-05-2016 23:07:41

Buenas
 
Cita:

Empezado por Héctor Randolph (Mensaje 505256)
Si vas a guardar esa cadena en un archivo XML, seguramente tendrás problemas de codificación.

Al aplicar tu función de encriptación el resultado puede contener caracteres no imprimibles y este puede ser el origen del problema al enviarlo a un archivo XML.

Lo más recomendable en este caso es que al resultado de tu encriptación le apliques adicionalmente la codificación Base64, el resultado será una cadena en la cuál todos los caracteres son imprimibles y en un rango seguro para compartir información sobre archivos XML. Después, cuando quieras obtener el contenido de la variable desde tu archivo XML debes aplicar las funciones a la inversa, es decir, primero descodificar Base64 y el resultado va a tu función inversa de cripto para obtener la cadena original.

Te recomiendo que busques en los foros por alguna función que codifique y descodifique Base64.

Saludos

Hola Héctor el tema es que antes funcionaba genial y ahora no solo muestra símbolos como chinos nose el porque pero este programa debe tener 10 años desde que se hizo y siempre funciono bien.- atte.-

Casimiro Notevi 16-05-2016 23:12:08

¿Estás compilándolo con alguna versión nueva de delphi?
Usa ansistring en lugar de string

gdlrinfo 19-05-2016 21:53:19

Holaa
 
Cita:

Empezado por Casimiro Notevi (Mensaje 505261)
¿Estás compilándolo con alguna versión nueva de delphi?
Usa ansistring en lugar de string

Si el programa estaba echo en delpi 7 yo uso Delphi XE6 .- Voy a probar lo de AnsiString graciasss

gdlrinfo 19-05-2016 22:08:08

Ansichar
 
Amigos si uso el ANSI me trae en blanco todo :S Gracias .-

Casimiro Notevi 20-05-2016 01:07:37

Al menos, pon todo tu código.

rastafarey 30-05-2016 15:08:53

Si es solo para guardar en un xml de manera que a simple vista no se vea y aparte no tengas problemas de codificación.
Código:

Function StrToHex(Const pcStr: String): String; Begin Result := ''; if pcStr <> '' then Begin SetLength(Result, Length(pcStr) * 2); BinToHex(@pcStr[1], @Result[1], Length(pcStr)); End; End; Function HexToStr(Const pcStr: String): String; Begin Result := ''; if pcStr <> '' then Begin SetLength(Result, Length(pcStr) Div 2); HexToBin(@pcStr[1], @Result[1], Length(pcStr)); End; End;
Estoy escribiendo desde un celular y de verdad tenia bastante tiempo sin colaborar.

Ese código te sirve para lo que quieres y aparte te evitas el problema de la codificación.

Enviado desde mi SM-G900H mediante Tapatalk

rastafarey 30-05-2016 16:43:39

Aqui se mejor
Código Delphi [-]
Function StrToHex(Const pcStr: String): String;
Begin
  Result := '';
  if pcStr <> '' then Begin
    SetLength(Result, Length(pcStr) * 2);
    BinToHex(@pcStr[1], @Result[1], Length(pcStr));
  End;
End;

Function HexToStr(Const pcStr: String): String;
Begin
  Result := '';
  if pcStr <> '' then Begin
    SetLength(Result, Length(pcStr) Div 2);
    HexToBin(@pcStr[1], @Result[1], Length(pcStr));
  End;
End;


La franja horaria es GMT +2. Ahora son las 00:29:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi