Cifrado Vernam

Iniciado por binary_death, Septiembre 03, 2013, 06:01:44 PM

Tema anterior - Siguiente tema

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

Un cifrado poco útil de hecho, pero irrompible. La longitud del password ha de ser igual a la del texto a cifrar.
Podéis leer sobre él en Wikipedia: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Códificador:

Código: php

@echo off
SetLocal EnableDelayedExpansion
Title Codificador Vernam
Set/P "str.a=Texto en claro >> "
Call:LtrAng
Call:StrLen "str.a" "Len.Str.a"
Call:RanPwd "Len.Str.a" "Pwd.a"
:_Algorithm
Set/A "Len.Str.a-=1"
For /l %%_ in (0,1,%Len.Str.a%) Do (
Call Call Set/A "Crp=%%%%Code[%%str.a:~%%_,1%%]%%%%+!Pwd.a[%%_]!"
Set/A "Crp=!Crp!%%27"&Call Set "Crpd.Txt=!Crpd.Txt!%%ascii[!Crp!]%%"
)
more/c<nul
Echo.Texto en claro: "!str.a!"
Echo.Texto cifrado: "!Crpd.Txt!"
Echo.Password: "!Pwd.a[ascii]!"
Pause>NUL
Exit
:RanPwd
Set/A "Count=0"
For /l %%i in (1,1,!%~1!) Do (
Set/A "Rnd=!random!%%27"
Set/A "%~2[!Count!]=!Rnd!","Count+=1"
Call Set "%~2[ascii]=!%~2[ascii]!%%ascii[!Rnd!]%%"
)
GoTo:EoF

:LtrAng
For /l %%n in (97,1,122) Do (
"%comspec%" /c exit /b %%n
Set/A "I=%%n-97"
Set "ascii[!I!]=!=ExitCodeAscii!"
Set "code[!=ExitCodeAscii!]=!I!"
)
Set "ascii[26]= "&Set "code[ ]=26"
GoTo:EoF
:StrLen
For /f %%_ In (
'CMD /U /C Echo.!%~1!^|^
More^|Find /V /N ""'
) Do Set/A "%~2+=1"
Set/A "%~2-=4"
GoTo:EoF


Descodificador:

Código: php

@echo off
SetLocal EnableDelayedExpansion
:_Main
more/c<nul
Set/P "str.a=Texto codificado >> "
Set/P "pwd.a=Password >> "
Call:LtrAng
Call:StrLen "str.a" "Len.Str.a"
Call:StrLen "pwd.a" "Len.Pwd.a"
If %Len.Pwd.a% NEQ %Len.Str.a% (
Echo.La longitud del texto codificado y ^
el password tiene que ser la misma.
Pause>NUL & GoTo:_Main
)
:_Algorithm
For /l %%_ in (0,1,%Len.Str.a%) Do (
Call Set/A "Drp=27+%%code[!str.a:~%%_,1!]%%-%%code[!pwd.a:~%%_,1!]%%"
Set/A "Drp=!Drp!%%27"&Call Set "Drp.Txt=!Drp.Txt!%%ascii[!Drp!]%%"
)
more/c<nul
Echo.Texto cifrado: "!str.a!"
Echo.Texto descifrado: "!Drp.Txt!"
Echo.Password: "!pwd.a!"
Pause>NUL
Exit
:LtrAng
For /l %%n in (97,1,122) Do (
"%comspec%" /c exit /b %%n
Set/A "I=%%n-97"
Set "ascii[!I!]=!=ExitCodeAscii!"
Set "code[!=ExitCodeAscii!]=!I!"
)
Set "ascii[26]= "&Set "code[ ]=26"
GoTo:EoF
:StrLen
For /f %%_ In (
'CMD /U /C Echo.!%~1!^|^
More^|Find /V /N ""'
) Do Set/A "%~2+=1"
Set/A "%~2-=5"
GoTo:EoF