Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   encriptar ¿? (https://www.clubdelphi.com/foros/showthread.php?t=44586)

baby 10-06-2007 12:44:33

encriptar ¿?
 
hola
muy buenas a todos los sabios del foro ;)
esty implimentando el codigo de cesar para encriptar cadenas que como ya lo sabeis consiste en sumar cada letra del array por 3 posiciones a la dech de su codigo ascii,el problema me esta dando con la z aunque lo hice con el teorema del resto pesando en que si se introduzca la z tiene que haber como resultado la c pero me sigue fallando en la z?¿nose porke ?¿
esta es la codificacion que hice

Código Delphi [-]
var
     cadena1,cadena2:string[100];
     nele,desp,tamano,i:integer;
begin
     desp:=3;
     nele:=23;
     cadena1:=edtf.Text;
     tamano:=length(cadena1);
     for i:=1 to tamano do
         cadena1[i]:=chr(ord(cadena1[i])+desp+nele mod 23);
    edtfe.Text:=cadena1;
end;
end.

gracias de antemano
saludos

basti 10-06-2007 14:20:15

Cuando haces nele mod 23, este valor siempre te va a dar 0 puesto que nele tiene el valor 23, por lo que esa operación no te sirve.

El valor mínimo que devuelve mod es 0, así que habrá que utilizar las letras como si la 'a' fuese un 0, para lo que hay que restarle a cada carácter el valor de ord('a'):

Código Delphi [-]
  for i := 1 to tamano do
    cadena1[i] := chr(ord('a') + (ord(cadena1[i])  - ord('a') + desp) mod nele);

marcoszorrilla 10-06-2007 14:23:21

El algoritmo que presentas está mal planteado ya que lo único que hace es sumarle 3 al código resultante:
Código:

A=65 + 3 = 68 =D
Z=90 + 3 = 93 =]

Un Saludo.

baby 10-06-2007 14:34:57

gracias mars y basti por vuestras respuestas
la solucion que me plantaste basti me parece esta bien lo k ocure acabo de aprobarlo con la 'z' y no funciona yak da como resultado 'f' mientras tiene que haber como reultado la 'c'
y con respecto a tu observacion marcus esa la solucion que me parece las mas facil no tengo otra :o :(
gracias

seoane 10-06-2007 16:40:47

Pues aquí tienes un par de algoritmos:

http://www.clubdelphi.com/foros/show...14&postcount=9
http://www.clubdelphi.com/foros/show...6&postcount=30

baby 10-06-2007 17:00:21

gracias seone
por tu propuesta pero segun me primera lectura eso no responderia al codigo cesar
:confused: :o

seoane 10-06-2007 17:24:04

Cita:

Empezado por baby
... segun me primera lectura eso no responderia al codigo cesar

En el primer enlace, tienes este código:
Código Delphi [-]
function Descifrar(Str: String; Clave: Integer): string;
var
  i,k: integer;
begin
  Str:= Uppercase(Str);
  Result:= '';
  for i:= 1 to Length(Str) do
  begin
    if Str[i] in ['A'..'Z'] then
    begin
      k:= Ord(Str[i]) - Clave;
      if k < Ord('A') then
        k:= Ord('Z') - Ord('A') + k + 1;
      Result:= Result + Chr(k);
    end else
      Result:= Result + Str[i];
  end;
end;
Este código se corresponde al descifrado, con una clave de valor 3 es justo lo que tu querías.

Ahora bien si lo que quieres es el cifrado:
Código Delphi [-]
function Cifrar(Str: String; Clave: Integer): string;
var
  i,k: integer;
begin
  Str:= Uppercase(Str);
  Result:= '';
  for i:= 1 to Length(Str) do
  begin
    if Str[i] in ['A'..'Z'] then
    begin
      k:= Ord(Str[i]) + Clave;
      if k > Ord('Z') then
        k:= Ord('A') - Ord('Z') + k - 1;
      Result:= Result + Chr(k);
    end else
      Result:= Result + Str[i];
  end;
end;

Aunque creo que era fácil de deducir a partir de los enlaces que te pase :)

Ejemplo:
Código Delphi [-]
ShowMessage(Descifrar(Cifrar('The quick brown fox jumps over the lazy dog',3),3));

basti 10-06-2007 17:28:05

Cita:

Empezado por baby
acabo de aprobarlo con la 'z' y no funciona yak da como resultado 'f' mientras tiene que haber como reultado la 'c'

Me he fijado y tienes el valor nele = 23 cuando tendría que ser 26.

baby 10-06-2007 17:34:48

gracias seone
acabo de probarlo y funciona :) gracias io
?;)
saludos
mucha gracias campeon


La franja horaria es GMT +2. Ahora son las 19:20:18.

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