Autor
|
Tema: [Reto Batch] cifrado caesar (Leído 13,282 veces)
|
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
Desconectado
Mensajes: 3.069
/^$/
|
Si tengo tiempo este fin de semana lo resuelvo, la universidad no me deja en paz :s
|
|
|
En línea
|
|
|
|
SmartGenius
Desconectado
Mensajes: 181
:P
|
Hace ya un tiempo habia publicado en el Blog un codigo de implementacion del Cifrado Cesar, es algo basico, pero cumple con su proposito. @Echo Off&Title Caesar Crypt - SmartGenius Setlocal Enabledelayedexpansion
:Init Set /p "Text=Enter Text >" If Not Defined Text Goto :Init Set /p "Rot=Enter Seed >" If Not Defined Rot Goto :Init If 26 LEQ %Rot% Goto :Init Call :Crypt.A Text Rot Echo. Echo. Result: %Text% Echo. Pause Exit
:Crypt.A If not defined %1 Goto:Eof Set "c=" Set "d=ABCDEFGHIJKLMNOPQRSTUVWXYZ" :Crypt.B Set "chr=!%1:~,1!" For /l %%l in (0 1 26) do ( if "!chr!" equ " " ( Set "%1=!%1:~1!" Set "c=!c! " Goto :Crypt.B) if "!chr!" equ "!d:~%%l,1!" ( set /a "x=(~((%%l-26)*-1)+!%~2!)+1" call set "c=!c!%%d:~!x!,1%%" )) Set "%1=!%1:~1!" If defined %1 goto:Crypt.B Set "%1=!c!" Goto :Eof Es la implementacion normal, en mayusculas, con una rotacion maxima de 25, se puede ampliar el diccionario y un par de modificaciones en los limites para que funcione como ustedes quieren Saludos.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
Hace ya un tiempo habia publicado en el Blog un codigo de implementacion del Cifrado Cesar, es algo basico, pero cumple con su proposito. Una solución de uno de los más grandes de Batch.
|
|
|
En línea
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
Sí, el código se puede optimizar xD pero no sé por qué tuve muchos problemas por los argumentos y bueno ahora es lo que es pero al menos funciona correctamente. ¡Saludos! :: CIFRADO CAESAR - BATCHIANO :) @echo off setlocal enabledelayedexpansion set "CHARS= abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" :MAIN cls echo. echo CIFRADO CAESAR - BATCHIANO :) echo. echo. 1. cifrar echo. 2. descifrar echo. 3. salir echo. set /p op=Opcion: if not defined op ( goto :main ) else ( if !op!==1 ( goto :cifrar ) else if !op!==2 ( goto :descifrar ) else ( exit/b ) ) :cifrar cls set /p desp=Desplazamiento lateral: set /p texto=Texto a cifrar: for %%? in (desp,texto) do if not defined %%? goto :cifrar call :analizar "e" "!texto!" !desp! echo ------------------- echo. Texto cifrado: !cad! pause>nul goto :eof
:descifrar cls echo El formato para descifrar es [desplazamiento]texto - Ejemplo: 2razqnq set /p texto=Texto a descifrar: if not defined texto goto :descifrar call :analizar "d" "!texto!" echo ------------------- echo. Texto descifrado: !cad! pause>nul goto :eof :analizar set t=%~2 set TYPE=%~1 if "!TYPE!"=="e" ( set /a d=%3 set cad=!d! set /a i=0 ) else ( set /a i=1 set "cad=" set shift=!t:~0,1! ) ::while :while if "!t:~%i%,1!" NEQ "" ( call :find_char "!t:~%i%,1!" "!CHARS!" call :class !return! if "!TYPE!"=="e" ( set /a rd=!return!+!d! ) else ( set /a rd=!return!-!shift! ) if "!CLASS!"=="NONE" ( set "cad=!cad!!t:~%i%,1!" ) else ( if "!CLASS!"=="SPACE" ( set "cad=!cad! " ) else ( if "!TYPE!"=="e" ( call :resize_enc !rd! ) else ( call :resize_dec !rd! ) call :select_char "!CHARS!" !rd! set "cad=!cad!!sc!" ) ) set /a i+=1 goto :while) goto :eof
:find_char set C=%~1 set L=%~2 set /a pos=0 :loop if "!C!" NEQ "!L:~%pos%,1!" ( set /a pos+=1 if !pos! LSS 64 (goto :loop) ) set /a return=%pos% goto :eof
:select_char set lc=%~1 set key=%2 set sc=!lc:~%key%,1! goto :eof
:class if %1 == 0 ( set CLASS=SPACE ) else if %1 GTR 0 ( if %1 LSS 27 ( set CLASS=MIN ) else if %1 LSS 53 ( set CLASS=MAY ) else if %1 LSS 63 ( set CLASS=NUM ) else ( set CLASS=NONE ) ) goto :eof
:resize_enc if "!CLASS!"=="MIN" ( if !rd! gtr 26 ( set /a rd-=26 ) ) if "!CLASS!"=="MAY" ( if !rd! gtr 52 ( set /a rd-=26 ) ) if "!CLASS!"=="NUM" ( if !rd! gtr 62 ( set /a rd-=10 ) ) goto :eof
:resize_dec if "!CLASS!"=="MIN" ( if !rd! lss 1 ( set /a rd+=26 ) ) if "!CLASS!"=="MAY" ( if !rd! lss 26 ( set /a rd+=26 ) ) if "!CLASS!"=="NUM" ( if !rd! lss 52 ( set /a rd+=10 ) ) goto :eof
|
|
« Última modificación: 24 Mayo 2012, 02:03 am por Batchiano »
|
En línea
|
|
|
|
Binary_Death
Desconectado
Mensajes: 214
|
Dejo aquí lo que hice yo: @Echo Off setlocal enableextensions enabledelayedexpansion
set /p "text=Texto: " set /p "rotn=Desplazamiento: " call:_caesar "%text%" "%rotn%" echo: -Cadena cifrada ^>^> %ret_str%
pause 1>nul & exit
:_caesar if "%~1" EQU "" goto :EoF set "chr_lst=abcdefghijklmnopqrstuvwxyz" set "string=%~1" & set "ret_str=" for /l %%i in (0,1,25) do set/a c[!chr_lst:~%%i,1!]=%%i set /a cnt=-1 :__loop.a set /a cnt+=1 set "chr=!string:~%cnt%,1!" if not defined chr goto :eof if "%chr%" EQU " " set "ret_str=%ret_str% " & goto :__loop.a set /a "num_cs=(!c[%chr%]!+%~2) %% 26" set "ret_str=%ret_str%!chr_lst:~%num_cs%,1!" goto :__loop.a
PD: Ups! Se me olvidó lo de descifrar. Pero da igual, basta con poner la clave en negativo. Por ejemplo, si cifras "hola" con desplazamiento 5, da "mtqf". Si cifras "mtqf" con desplazamiento -5 da "hola". Así que supongo que os sirve igual PD2: Funciona tanto con mayúsculas como con minúsculas, pero la cadena cifrada la retorna siempre en minúsculas.
|
|
« Última modificación: 21 Julio 2012, 23:13 pm por Binary_Death »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
introduccion al cifrado en batch |By-Skull|
Scripting
|
[SMT]
|
4
|
4,153
|
9 Abril 2008, 21:19 pm
por Crazy.sx
|
|
|
[Ayuda] Reto de Yashira - PHP Con cifrado
Desafíos - Wargames
|
emma93
|
5
|
8,707
|
27 Diciembre 2010, 20:28 pm
por WHK
|
|
|
[Batch] Criptoanalizador del cifrado generico monoalfabetico por sustitucion
Scripting
|
lShadowl
|
0
|
3,944
|
26 Febrero 2011, 14:23 pm
por lShadowl
|
|
|
[Reto Batch] It's a dir?
« 1 2 3 4 »
Scripting
|
Eleкtro
|
30
|
20,447
|
31 Marzo 2014, 18:13 pm
por Shell Root
|
|
|
[APORTE] [BATCH] Automatizar apertura de volumen y baúl cifrado v2.2
Scripting
|
cyberalejo17
|
4
|
5,599
|
3 Mayo 2014, 00:30 am
por Eleкtro
|
|