Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- setlocal enabledelayedexpansion
- chcp 65001 > nul
- set "Cypher4Square=call :Cypher4Square"
- %Cypher4Square%.Init
- rem %Cypher4Square%.GetBinome "salut batch.bat" YO
- %Cypher4Square%.getMatrixCharset matrix_charset
- %Cypher4Square%.getWord salut
- %Cypher4Square%.getWord bonjour
- rem Avec cette configuration
- rem "eau de source" (Decrypt) == "sy-rrq/nl55qm'" (Encrypt)
- rem Test
- %Cypher4Square%.Crypt "eau de source" MessageCrypted
- echo;"eau de source"-^>"!MessageCrypted!"
- %Cypher4Square%.DeCrypt "sy-rrq/nl55qm'" MessageDeCrypted
- echo;"sy-rrq/nl55qm'"-^>"!MessageDeCrypted!"
- pause>nul&exit
- rem ============
- rem By Flammrock
- rem ============
- :Cypher4Square.Init
- set "Cypher4Square.Charset=abcdefghijklmnopqrstuvwxyz0123456789-_ .'éèêà,:;/"
- set Cypher4Square.Size=7
- set /a Cypher4Square.PSize=!Cypher4Square.Size!-1
- set /a Cypher4Square.TSize=!Cypher4Square.Size!*!Cypher4Square.Size!
- set Cypher4Square.WordIndex=0
- Exit /b
- :Cypher4Square.GetBinome <Message> <Output:Matrix(2)>
- rem Toutes les variables déclarés dans cette fonction seront détruite
- rem dès que cette fonction aura terminé
- setlocal enabledelayedexpansion
- rem On trim la chaine
- for /f "usebackq tokens=*" %%i in (`echo %~1`) do set C4S.msg=%%i
- rem Si le message est vide, on quitte
- if "!C4S.msg!"=="" Exit /b 1
- rem On récupuère la longueur du message
- %Cypher4Square%.Length C4S.msg C4S.L
- set /a C4S.L-=1
- rem On vérifie le Trim
- for %%l in (!C4S.L!) do (
- if "!C4S.msg:~%%l,1!"==" " set /a C4S.L-=1
- )
- rem Si on trouve un caractère invalide, on le supprime de la chaine
- set C4S.msgout=!C4S.msg!
- for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.msg:~%%i,1!") do (
- if "!Cypher4Square.Charset:%%~a=!"=="!Cypher4Square.Charset!" (
- set C4S.msgout=!C4S.msgout:%%~a=!
- )
- )
- rem On recalcule la longueur
- %Cypher4Square%.Length C4S.msgout C4S.L
- set /a C4S.L-=1
- rem On veut ranger les lettres du messages 2 par 2,
- rem donc si la longueur de la chaine est impaire, on ajoute un espace
- set /a "C4S.test=!C4S.L! %% 2"
- if "!C4S.test!"=="0" (
- set "C4S.msgout=!C4S.msgout! "
- set /a C4S.L+=1
- )
- rem On créé une matrice de [longueur(message)//2]x2
- set /a C4S.L+=1
- set C4S.T.Length=0
- for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.msgout:~%%i,1!") do (
- set /a "C4S.test=%%i %% 2"
- if "!C4S.test!"=="0" if not "%%i"=="0" (
- rem for %%o in (%~2[!%~2.Length!]) do echo;!%~2.Length!:"!%%o!"
- set /a C4S.T.Length+=1
- )
- for %%o in (C4S.T[!C4S.T.Length!]) do set "%%o=!%%o!%%~a"
- )
- rem On prépare l'output
- set /a %~2.TLength=!C4S.T.Length!-1
- for /l %%i in (0,1,!%~2.TLength!) do (
- if defined _ret (
- set _ret=!_ret! ^&
- )
- set _ret=!_ret!set "%~2[%%i]=!C4S.T[%%i]!"
- )
- if defined _ret (
- set _ret=!_ret! ^&
- )
- set _ret=!_ret!set "%~2.Length=!C4S.T.Length!
- (
- endlocal
- %_ret%
- )
- rem Message: "Salut batch.bat"
- rem Produit ceci :
- rem 0:"Sa"
- rem 1:"lu"
- rem 2:"t "
- rem 3:"ba"
- rem 4:"tc"
- rem 5:"h."
- rem 6:"ba"
- rem 7:"t "
- Exit /b 0
- :Cypher4Square.getMatrixCharset <Output:Matrix(2)>
- set %~1.Length=0
- set C4S.N=0
- for /l %%i in (0,1,!Cypher4Square.PSize!) do (
- for /l %%j in (0,1,!Cypher4Square.PSize!) do (
- for %%u in (!C4S.N!) do for %%a in ("!Cypher4Square.Charset:~%%u,1!") do (
- for %%o in (%~1[!%~1.Length!]) do (
- set %%o=!%%o!%%~a
- )
- set /a C4S.N+=1
- )
- )
- set /a %~1.Length+=1
- )
- rem Permet de produire cette matrice:
- rem 0:"abcdefg"
- rem 1:"hijklmn"
- rem 2:"opqrstu"
- rem 3:"vwxyz01"
- rem 4:"2345678"
- rem 5:"9-_ .'├"
- rem 6:"®├¿├¬├á"
- Exit /b 0
- :Cypher4Square.getWord <Word>
- rem Toutes les variables déclarés dans cette fonction seront détruite
- rem dès que cette fonction aura terminé
- setlocal enabledelayedexpansion
- if "!Cypher4Square.WordIndex!"=="2" set Cypher4Square.WordIndex=0
- rem On trim le mot
- for /f "usebackq tokens=*" %%i in (`echo %~1`) do set C4S.word=%%i
- rem Si le mot est vide, on quitte et on lève une erreur
- if "!C4S.word!"=="" (
- echo;[Error] Word is Empty
- Exit /b 1
- )
- rem On vérifie le Trim
- for %%l in (!C4S.L!) do (
- if "!C4S.word:~%%l,1!"==" " set /a C4S.L-=1
- )
- rem Si on trouve un caractère invalide, on le supprime de la chaine
- set C4S.wordout=!C4S.word!
- for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.word:~%%i,1!") do (
- if "!Cypher4Square.Charset:%%~a=!"=="!Cypher4Square.Charset!" (
- set "C4S.wordout=!C4S.wordout:%%~a=!"
- )
- )
- rem On recalcule la longueur
- %Cypher4Square%.Length C4S.wordout C4S.L
- set /a C4S.L-=1
- set "C4S.T[0]= "
- for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.wordout:~%%i,1!") do (
- if "!C4S.T[0]:%%~a=!"=="!C4S.T[0]!" set "C4S.T[0]=!C4S.T[0]!%%~a"
- )
- set "C4S.T[0]=!C4S.T[0]:~1!"
- rem On calcule la longueur de C4S.T[0]
- %Cypher4Square%.Length C4S.T[0] C4S.L
- set /a C4S.L-=1
- rem On calcule la longueur de Cypher4Square.Charset
- %Cypher4Square%.Length Cypher4Square.Charset C4S.LCharset
- set /a C4S.LCharset-=1
- rem On définit les variables
- set C4S.i=0
- set C4S.j=0
- set C4S.u=1
- set C4S.v=true
- set /a C4S.LL=!C4S.L!+1
- set /a C4S.LCharsett=!C4S.LCharset!+1
- rem Boucle While
- :Cypher4Square.getWord.While1
- set /a C4S.j_calc=!C4S.j!+1
- if !C4S.j_calc! GTR !C4S.LCharsett! (
- goto :Cypher4Square.getWord.While1.End
- )
- for %%j in (!C4S.j!) do for %%a in ("!Cypher4Square.Charset:~%%j,1!") do (
- if "!C4S.T[0]:%%~a=!"=="!C4S.T[0]!" (
- if "C4S.v!"=="true" (
- set /a C4S.u+=1
- )
- for %%n in ("C4S.T[!C4S.u!]") do set "%%~n=!%%~n!%%~a"
- set /a C4S.i+=1
- set C4S.v=false
- set /a C4S.i_calc=!C4S.i! %% !C4S.LL!
- if "!C4S.i_calc!"=="0" if "!C4S.v!"=="false" (
- set C4S.i=0
- set /a C4S.u+=1
- )
- )
- )
- set /a C4S.j+=1
- goto :Cypher4Square.getWord.While1
- :Cypher4Square.getWord.While1.End
- set /a C4S.T.Length=!C4S.u!
- rem On prépare l'output
- for %%w in (!Cypher4Square.WordIndex!) do (
- for /l %%i in (0,1,!C4S.T.Length!) do (
- if defined _ret (
- set _ret=!_ret! ^&
- )
- set _ret=!_ret!set "Cypher4Square.Word[%%w][%%i]=!C4S.T[%%i]!"
- )
- if defined _ret (
- set _ret=!_ret! ^&
- )
- set _ret=!_ret!set "Cypher4Square.Word[%%w].Length=!C4S.T.Length!
- )
- (
- endlocal
- %_ret%
- )
- rem for /l %%i in (0,1,!Cypher4Square.Word[0].Length!) do (
- rem echo;%%i:"!Cypher4Square.Word[0][%%i]!"
- rem )
- rem Avec "salut", on obtient ceci
- rem 0:"salut"
- rem 1:"bcdef"
- rem 2:"ghijk"
- rem 3:"mnopq"
- rem 4:"rvwxy"
- rem 5:"z0123"
- rem 6:"45678"
- rem 7:"9-_ ."
- rem 8:"'éèêà"
- rem 9:",:;/"
- )
- set /a Cypher4Square.WordIndex+=1
- %Cypher4Square%.ConstructMatrix
- Exit /b 0
- :Cypher4Square.ConstructMatrix
- rem Toutes les variables déclarés dans cette fonction seront détruite
- rem dès que cette fonction aura terminé
- setlocal enabledelayedexpansion
- set /a Cypher4Square.TWordIndex=!Cypher4Square.WordIndex!-1
- set C4S.c_word=Cypher4Square.Word[!Cypher4Square.TWordIndex!]
- rem On définit les variables
- set C4S.i=0
- set C4S.x=0
- set C4S.y=0
- set C4S._x=0
- set C4S._y=0
- set C4S.v=true
- rem on calcule la longueur de la matrice word[index]
- %Cypher4Square%.Length !C4S.c_word![0] C4S.L
- for %%i in ("!C4S.c_word!.Length") do set /a C4S.L=!%%~i!+1
- rem Boucle While
- :Cypher4Square.ConstructMatrix.While1
- if !C4S._y! GEQ !Cypher4Square.Size! (
- goto :Cypher4Square.ConstructMatrix.While1.End
- )
- set /a C4S.y_calc=!C4S.y! %% !C4S.L!
- if "!C4S.y_calc!!C4S.v!"=="0false" (
- set C4S.y=0
- set /a C4S.x+=1
- )
- if !C4S._x! GEQ !Cypher4Square.Size! (
- set C4S._x=0
- set /a C4S._y+=1
- )
- %Cypher4Square%.Length !C4S.c_word![!C4S.y!] C4S.TL
- set /a C4S.TL-=1
- if !C4S.x! LEQ !C4S.TL! (
- set /a C4S._x+=1
- for %%g in ("!C4S.c_word![!C4S.y!]") do for %%h in ("!C4S.x!") do (
- for %%k in ("C4S.T[!C4S._y!]") do set "%%~k=!%%~k!!%%~g:~%%~h,1!"
- )
- )
- set /a C4S.y+=1
- set C4S.v=false
- goto :Cypher4Square.ConstructMatrix.While1
- :Cypher4Square.ConstructMatrix.While1.End
- set /a C4S.T.Length=!C4S._y!-1
- rem On prépare l'output
- set /a Cypher4Square.TWordIndex=!Cypher4Square.WordIndex!-1
- for %%w in (!Cypher4Square.TWordIndex!) do (
- for /l %%i in (0,1,!C4S.T.Length!) do (
- if defined _ret (
- set _ret=!_ret! ^&
- )
- set _ret=!_ret!set "Cypher4Square.EncryptWord[%%w][%%i]=!C4S.T[%%i]!"
- )
- if defined _ret (
- set _ret=!_ret! ^&
- )
- set _ret=!_ret!set "Cypher4Square.EncryptWord[%%w].Length=!C4S.T.Length!
- )
- (
- endlocal
- %_ret%
- )
- rem for /l %%i in (0,1,!Cypher4Square.EncryptWord[0].Length!) do (
- rem echo;%%i:"!Cypher4Square.EncryptWord[0][%%i]!"
- rem )
- rem Avec "salut", on obtient ceci
- rem 0:"sbgmrz4"
- rem 1:"9',achn"
- rem 2:"v05-é:l"
- rem 3:"diow16_"
- rem 4:"è;uejpx"
- rem 5:"27 ê/tf"
- rem 6:"kqy38.à"
- Exit /b 0
- :Cypher4Square.getIndex <Matrix(2)> <Char> <Output:Index1> <Output:Index2>
- for /l %%y in (0,1,!Cypher4Square.PSize!) do (
- for /l %%x in (0,1,!Cypher4Square.PSize!) do (
- if "!%~1[%%y]:~%%x,1!"=="%~2" (
- set %~3=%%y
- set %~4=%%x
- Exit /b 0
- )
- )
- )
- Exit /b 1
- :Cypher4Square.Crypt <Message> <Output:EncryptedMessage>
- %Cypher4Square%.GetBinome "%~1" Binome
- set /a Binome.Length-=1
- set %~2=
- for /l %%i in (0,1,!Binome.Length!) do (
- set C4S.1=!Binome[%%i]:~0,1!
- set C4S.2=!Binome[%%i]:~1,1!
- %Cypher4Square%.getIndex matrix_charset "!C4S.1!" delta_x_1 delta_x_2
- %Cypher4Square%.getIndex matrix_charset "!C4S.2!" delta_y_2 delta_y_1
- for %%h in ("!delta_x_1!") do for %%g in ("!delta_y_1!") do set "C4S.a=!Cypher4Square.EncryptWord[0][%%~h]:~%%~g,1!"
- for %%h in ("!delta_y_2!") do for %%g in ("!delta_x_2!") do set "C4S.b=!Cypher4Square.EncryptWord[1][%%~h]:~%%~g,1!"
- set %~2=!%~2!!C4S.a!!C4S.b!
- )
- Exit /b 0
- :Cypher4Square.Decrypt <Message> <Output:DecryptedMessage>
- %Cypher4Square%.GetBinome "%~1" Binome
- set /a Binome.Length-=1
- set %~2=
- for /l %%i in (0,1,!Binome.Length!) do (
- set C4S.1=!Binome[%%i]:~0,1!
- set C4S.2=!Binome[%%i]:~1,1!
- %Cypher4Square%.getIndex Cypher4Square.EncryptWord[0] "!C4S.1!" delta_x_1 delta_x_2
- %Cypher4Square%.getIndex Cypher4Square.EncryptWord[1] "!C4S.2!" delta_y_2 delta_y_1
- for %%h in ("!delta_x_1!") do for %%g in ("!delta_y_1!") do set "C4S.a=!matrix_charset[%%~h]:~%%~g,1!"
- for %%h in ("!delta_y_2!") do for %%g in ("!delta_x_2!") do set "C4S.b=!matrix_charset[%%~h]:~%%~g,1!"
- set %~2=!%~2!!C4S.a!!C4S.b!
- )
- if "!%~2:~-1!"==" " set %~2=!%~2:~0,-1!
- Exit /b 0
- :Cypher4Square.Length <String> <Output:Length>
- set "stmp=!%~1!#"
- set "len=0"
- for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
- if "!stmp:~%%P,1!" NEQ "" (
- set /a "len+=%%P"
- set "stmp=!stmp:~%%P!"
- )
- )
- set "%~2=!len!"
- exit /b 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement