Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-06-2007
baby baby is offline
Miembro
 
Registrado: may 2007
Posts: 15
Poder: 0
baby Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 10-06-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
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);
Responder Con Cita
  #3  
Antiguo 10-06-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
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.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #4  
Antiguo 10-06-2007
baby baby is offline
Miembro
 
Registrado: may 2007
Posts: 15
Poder: 0
baby Va por buen camino
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
gracias
Responder Con Cita
  #5  
Antiguo 10-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 10-06-2007
baby baby is offline
Miembro
 
Registrado: may 2007
Posts: 15
Poder: 0
baby Va por buen camino
gracias seone
por tu propuesta pero segun me primera lectura eso no responderia al codigo cesar
Responder Con Cita
  #7  
Antiguo 10-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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));
Responder Con Cita
  #8  
Antiguo 10-06-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
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.
Responder Con Cita
  #9  
Antiguo 10-06-2007
baby baby is offline
Miembro
 
Registrado: may 2007
Posts: 15
Poder: 0
baby Va por buen camino
gracias seone
acabo de probarlo y funciona gracias io
?
saludos
mucha gracias campeon
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Encriptar imágenes roman Gráficos 8 26-12-2006 08:12:03
encriptar xelip Varios 1 27-08-2006 21:47:10
Encriptar Clave agora18 Varios 1 17-10-2003 22:19:32
Encriptar datos miguelb Varios 1 17-07-2003 08:24:00
Encriptar datos? emeceuy Varios 2 03-07-2003 17:56:50


La franja horaria es GMT +2. Ahora son las 11:46:29.


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
Copyright 1996-2007 Club Delphi