[BATCH] ¿Como puedo adaptar un texto a otro?

Iniciado por Meine programmen, 8 Abril 2012, 16:53 PM

0 Miembros y 1 Visitante están viendo este tema.

Meine programmen

Bueno, de primeras no se siquiera si plantee bien la pregunta, asi que mejor me explico. Estoy intentando hacer en batch un programa que encripte texto plano con el cifrado de Vigenère. Para simplificarlo un poco, es una tabla como esta

Se pone la letra del mensaje en el abecedario de arriba y la letra de la clave en el de la derecha, y donde se crucen una y otra es el resultado. Bueno, el caso es que si a cada letra le asignamos un valor por su posicion, se suman los valores de las dos letras, se le resta 1 y si es mayor que el numero de letras del abecedario se le resta el numero de letas del abecedario. El resultado es el valor de la letra que saldria con el cuadro. El problema esta en que no se como hacer que la clave se adapte al mensaje. Por ejemplo, si el mensaje es "Hola amigo" y la clave "Ghj", la clave se tendria que adaptar al mensaje asi:
HOLA AMIGO
GHJG HJGHJ
Y lo mismo si el mensaje fuera mas corto que la clave. Y ademas de adaptar la clave al mensaje tambien esta que tendria que operar con cada letra por separado. Gracias por adelantado
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


Eleкtro

#1
Cita de: Meine programmen en  8 Abril 2012, 16:53 PM
no se como hacer que la clave se adapte al mensaje. Por ejemplo, si el mensaje es "Hola amigo" y la clave "Ghj", la clave se tendria que adaptar al mensaje asi:
HOLA AMIGO
GHJG HJGHJ
Y lo mismo si el mensaje fuera mas corto que la clave.

No se si lo he entendido muy bien...

¿Lo que quieres hacer es repetir la clave hasta que tenga el mismo número de caracteres que el mensaje?

Y luego, lo mismo pero al revés? ¿Si la clave tiene mayor longitud que el mensaje, repetir el mensaje hasta adaptarlo a la longitud de la clave?

Pues entonces quizás esto te sirva para adaptarlo a tu idea:





@Echo OFF
Setlocal enabledelayedexpansion

Set "Mensaje=HOLA AMIGO"
Set "Clave=GHJ"
Call :Mensaje_Length
Call :Clave_Length

If %Mensaje_len% LSS %Clave_len% (Goto :Bucle1) else (Goto :Bucle2)

:Bucle1
IF %Mensaje_len% LSS %Clave_len% (
Set "Mensaje=%Mensaje%%Mensaje%"
Call :Mensaje_Length
Goto :Bucle1
) Else (
Set Mensaje=!Mensaje:~0,%Clave_len%!
)
Goto :Fin

:Bucle2
IF %Clave_len% LEQ %Mensaje_len% (
Set "Clave=%Clave%%Clave%"
Call :Clave_Length
Goto :Bucle2
) Else (
Set Clave=!Clave:~0,%Mensaje_len%!
)
Goto :Fin

:Clave_Length
ECHO %clave%>temp& FOR %%? IN (temp) DO (SET /A Clave_len=%%~z? - 2)
Goto :EOF

:Mensaje_Length
ECHO %Mensaje%>temp& FOR %%? IN (temp) DO (SET /A Mensaje_len=%%~z? - 2)
Goto :EOF

:Fin
Echo Test  | MORE
Echo Mensaje: %Mensaje%
Echo Clave  : %Clave%
pause >NUL



EDITO:  Si necesitas añadir el caracter del espacio, Puedes ayudarte de un contador para comprobar en que posición de la línea está el el espacio: (If "!Mensaje:~%Cont%,1!" EQU " "... )

No quise alargar más el código porque no se si es lo que quieres.
Espero que te sirva.

Salu2.