Advertisement
Guest User

Untitled

a guest
Jun 10th, 2019
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 11.13 KB | None | 0 0
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. chcp 65001 > nul
  4. set "Cypher4Square=call :Cypher4Square"
  5.  
  6.  
  7. %Cypher4Square%.Init
  8.  
  9. rem %Cypher4Square%.GetBinome "salut batch.bat" YO
  10.  
  11.  
  12.  
  13. %Cypher4Square%.getMatrixCharset matrix_charset
  14.  
  15.  
  16. %Cypher4Square%.getWord salut
  17. %Cypher4Square%.getWord bonjour
  18.  
  19.  
  20. rem Avec cette configuration
  21. rem "eau de source" (Decrypt) == "sy-rrq/nl55qm'" (Encrypt)
  22.  
  23. rem Test
  24.  
  25.  
  26.  
  27. %Cypher4Square%.Crypt "eau de source" MessageCrypted
  28. echo;"eau de source"-^>"!MessageCrypted!"
  29.  
  30.  
  31.  
  32. %Cypher4Square%.DeCrypt "sy-rrq/nl55qm'" MessageDeCrypted
  33. echo;"sy-rrq/nl55qm'"-^>"!MessageDeCrypted!"
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. pause>nul&exit
  41. rem ============
  42. rem By Flammrock
  43. rem ============
  44. :Cypher4Square.Init
  45.   set "Cypher4Square.Charset=abcdefghijklmnopqrstuvwxyz0123456789-_ .'éèêà,:;/"
  46.   set Cypher4Square.Size=7
  47.   set /a Cypher4Square.PSize=!Cypher4Square.Size!-1
  48.   set /a Cypher4Square.TSize=!Cypher4Square.Size!*!Cypher4Square.Size!
  49.   set Cypher4Square.WordIndex=0
  50. Exit /b
  51.  
  52. :Cypher4Square.GetBinome <Message> <Output:Matrix(2)>
  53.  rem Toutes les variables déclarés dans cette fonction seront détruite
  54.  rem dès que cette fonction aura terminé
  55.   setlocal enabledelayedexpansion
  56.  
  57.  
  58.   rem On trim la chaine
  59.   for /f "usebackq tokens=*" %%i in (`echo %~1`) do set C4S.msg=%%i
  60.  
  61.   rem Si le message est vide, on quitte
  62.   if "!C4S.msg!"=="" Exit /b 1
  63.  
  64.   rem On récupuère la longueur du message
  65.   %Cypher4Square%.Length C4S.msg C4S.L
  66.   set /a C4S.L-=1
  67.  
  68.   rem On vérifie le Trim
  69.   for %%l in (!C4S.L!) do (
  70.     if "!C4S.msg:~%%l,1!"==" " set /a C4S.L-=1
  71.   )
  72.  
  73.   rem Si on trouve un caractère invalide, on le supprime de la chaine
  74.   set C4S.msgout=!C4S.msg!
  75.   for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.msg:~%%i,1!") do (
  76.     if "!Cypher4Square.Charset:%%~a=!"=="!Cypher4Square.Charset!" (
  77.       set C4S.msgout=!C4S.msgout:%%~a=!
  78.     )
  79.   )
  80.  
  81.   rem On recalcule la longueur
  82.   %Cypher4Square%.Length C4S.msgout C4S.L
  83.   set /a C4S.L-=1
  84.  
  85.   rem On veut ranger les lettres du messages 2 par 2,
  86.  rem donc si la longueur de la chaine est impaire, on ajoute un espace
  87.   set /a "C4S.test=!C4S.L! %% 2"
  88.   if "!C4S.test!"=="0" (
  89.     set "C4S.msgout=!C4S.msgout! "
  90.     set /a C4S.L+=1
  91.   )
  92.  
  93.   rem On créé une matrice de [longueur(message)//2]x2
  94.   set /a C4S.L+=1
  95.   set C4S.T.Length=0
  96.   for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.msgout:~%%i,1!") do (
  97.     set /a "C4S.test=%%i %% 2"
  98.     if "!C4S.test!"=="0" if not "%%i"=="0" (
  99.       rem for %%o in (%~2[!%~2.Length!]) do  echo;!%~2.Length!:"!%%o!"
  100.       set /a C4S.T.Length+=1
  101.     )
  102.     for %%o in (C4S.T[!C4S.T.Length!]) do set "%%o=!%%o!%%~a"
  103.   )
  104.  
  105.   rem On prépare l'output
  106.   set /a %~2.TLength=!C4S.T.Length!-1
  107.   for /l %%i in (0,1,!%~2.TLength!) do (
  108.     if defined _ret (
  109.       set _ret=!_ret! ^&
  110.     )
  111.     set _ret=!_ret!set "%~2[%%i]=!C4S.T[%%i]!"
  112.   )
  113.   if defined _ret (
  114.     set _ret=!_ret! ^&
  115.   )
  116.   set _ret=!_ret!set "%~2.Length=!C4S.T.Length!
  117.  
  118.  
  119.   (
  120.     endlocal
  121.     %_ret%
  122.   )
  123.  
  124.   rem Message: "Salut batch.bat"
  125.  rem Produit ceci :
  126.  rem 0:"Sa"
  127.  rem 1:"lu"
  128.  rem 2:"t "
  129.  rem 3:"ba"
  130.  rem 4:"tc"
  131.  rem 5:"h."
  132.  rem 6:"ba"
  133.  rem 7:"t "
  134. Exit /b 0
  135.  
  136.  
  137.  
  138. :Cypher4Square.getMatrixCharset <Output:Matrix(2)>
  139.   set %~1.Length=0
  140.   set C4S.N=0
  141.   for /l %%i in (0,1,!Cypher4Square.PSize!) do (
  142.     for /l %%j in (0,1,!Cypher4Square.PSize!) do (
  143.       for %%u in (!C4S.N!) do for %%a in ("!Cypher4Square.Charset:~%%u,1!") do (
  144.         for %%o in (%~1[!%~1.Length!]) do (
  145.           set %%o=!%%o!%%~a
  146.         )
  147.         set /a C4S.N+=1
  148.       )
  149.     )
  150.     set /a %~1.Length+=1
  151.   )
  152.  rem Permet de produire cette matrice:
  153.  rem 0:"abcdefg"
  154.  rem 1:"hijklmn"
  155.  rem 2:"opqrstu"
  156.  rem 3:"vwxyz01"
  157.  rem 4:"2345678"
  158.  rem 5:"9-_ .'├"
  159.  rem 6:"®├¿├¬├á"
  160. Exit /b 0
  161.  
  162. :Cypher4Square.getWord <Word>
  163.  rem Toutes les variables déclarés dans cette fonction seront détruite
  164.  rem dès que cette fonction aura terminé
  165.   setlocal enabledelayedexpansion
  166.  
  167.   if "!Cypher4Square.WordIndex!"=="2" set Cypher4Square.WordIndex=0
  168.  
  169.   rem On trim le mot
  170.   for /f "usebackq tokens=*" %%i in (`echo %~1`) do set C4S.word=%%i
  171.  
  172.   rem Si le mot est vide, on quitte et on lève une erreur
  173.   if "!C4S.word!"=="" (
  174.     echo;[Error] Word is Empty
  175.     Exit /b 1
  176.   )
  177.  
  178.   rem On vérifie le Trim
  179.   for %%l in (!C4S.L!) do (
  180.     if "!C4S.word:~%%l,1!"==" " set /a C4S.L-=1
  181.   )
  182.  
  183.   rem Si on trouve un caractère invalide, on le supprime de la chaine
  184.   set C4S.wordout=!C4S.word!
  185.   for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.word:~%%i,1!") do (
  186.     if "!Cypher4Square.Charset:%%~a=!"=="!Cypher4Square.Charset!" (
  187.       set "C4S.wordout=!C4S.wordout:%%~a=!"
  188.     )
  189.   )
  190.  
  191.   rem On recalcule la longueur
  192.   %Cypher4Square%.Length C4S.wordout C4S.L
  193.   set /a C4S.L-=1
  194.  
  195.   set "C4S.T[0]= "
  196.   for /l %%i in (0,1,!C4S.L!) do for %%a in ("!C4S.wordout:~%%i,1!") do (
  197.     if "!C4S.T[0]:%%~a=!"=="!C4S.T[0]!" set "C4S.T[0]=!C4S.T[0]!%%~a"
  198.   )
  199.   set "C4S.T[0]=!C4S.T[0]:~1!"
  200.  
  201.   rem On calcule la longueur de C4S.T[0]
  202.   %Cypher4Square%.Length C4S.T[0] C4S.L
  203.   set /a C4S.L-=1
  204.  
  205.   rem On calcule la longueur de Cypher4Square.Charset
  206.   %Cypher4Square%.Length Cypher4Square.Charset C4S.LCharset
  207.   set /a C4S.LCharset-=1
  208.  
  209.   rem On définit les variables
  210.   set C4S.i=0
  211.   set C4S.j=0
  212.   set C4S.u=1
  213.   set C4S.v=true
  214.   set /a C4S.LL=!C4S.L!+1
  215.   set /a C4S.LCharsett=!C4S.LCharset!+1
  216.  
  217.   rem Boucle While
  218.   :Cypher4Square.getWord.While1
  219.  
  220.     set /a C4S.j_calc=!C4S.j!+1
  221.     if !C4S.j_calc! GTR !C4S.LCharsett! (
  222.       goto :Cypher4Square.getWord.While1.End
  223.     )
  224.     for %%j in (!C4S.j!) do for %%a in ("!Cypher4Square.Charset:~%%j,1!") do (
  225.       if "!C4S.T[0]:%%~a=!"=="!C4S.T[0]!" (
  226.        
  227.         if "C4S.v!"=="true" (
  228.           set /a C4S.u+=1
  229.         )
  230.         for %%n in ("C4S.T[!C4S.u!]") do set "%%~n=!%%~n!%%~a"
  231.         set /a C4S.i+=1
  232.         set C4S.v=false
  233.        
  234.         set /a C4S.i_calc=!C4S.i! %% !C4S.LL!
  235.         if "!C4S.i_calc!"=="0" if "!C4S.v!"=="false" (
  236.           set C4S.i=0
  237.           set /a C4S.u+=1
  238.         )
  239.        
  240.       )
  241.      
  242.     )
  243.    
  244.     set /a C4S.j+=1
  245.    
  246.   goto :Cypher4Square.getWord.While1
  247.   :Cypher4Square.getWord.While1.End
  248.   set /a C4S.T.Length=!C4S.u!
  249.  
  250.   rem On prépare l'output
  251.   for %%w in (!Cypher4Square.WordIndex!) do (
  252.     for /l %%i in (0,1,!C4S.T.Length!) do (
  253.       if defined _ret (
  254.         set _ret=!_ret! ^&
  255.       )
  256.       set _ret=!_ret!set "Cypher4Square.Word[%%w][%%i]=!C4S.T[%%i]!"
  257.     )
  258.     if defined _ret (
  259.       set _ret=!_ret! ^&
  260.     )
  261.     set _ret=!_ret!set "Cypher4Square.Word[%%w].Length=!C4S.T.Length!
  262.   )
  263.   (
  264.     endlocal
  265.     %_ret%
  266.   )
  267.  
  268.   rem for /l %%i in (0,1,!Cypher4Square.Word[0].Length!) do (
  269.  rem   echo;%%i:"!Cypher4Square.Word[0][%%i]!"
  270.  rem )
  271.  rem Avec "salut", on obtient ceci
  272.  rem 0:"salut"
  273.  rem 1:"bcdef"
  274.  rem 2:"ghijk"
  275.  rem 3:"mnopq"
  276.  rem 4:"rvwxy"
  277.  rem 5:"z0123"
  278.  rem 6:"45678"
  279.  rem 7:"9-_ ."
  280.  rem 8:"'éèêà"
  281.  rem 9:",:;/"
  282.  
  283.   )
  284.  
  285.   set /a Cypher4Square.WordIndex+=1
  286.   %Cypher4Square%.ConstructMatrix
  287. Exit /b 0
  288.  
  289.  
  290.  
  291.  
  292. :Cypher4Square.ConstructMatrix
  293.  rem Toutes les variables déclarés dans cette fonction seront détruite
  294.  rem dès que cette fonction aura terminé
  295.   setlocal enabledelayedexpansion
  296.  
  297.  
  298.   set /a Cypher4Square.TWordIndex=!Cypher4Square.WordIndex!-1
  299.   set C4S.c_word=Cypher4Square.Word[!Cypher4Square.TWordIndex!]
  300.  
  301.   rem On définit les variables
  302.   set C4S.i=0
  303.   set C4S.x=0
  304.   set C4S.y=0
  305.   set C4S._x=0
  306.   set C4S._y=0
  307.   set C4S.v=true
  308.  
  309.   rem on calcule la longueur de la matrice word[index]
  310.   %Cypher4Square%.Length !C4S.c_word![0] C4S.L
  311.   for %%i in ("!C4S.c_word!.Length") do set /a C4S.L=!%%~i!+1
  312.  
  313.   rem Boucle While
  314.   :Cypher4Square.ConstructMatrix.While1
  315.  
  316.     if !C4S._y! GEQ !Cypher4Square.Size! (
  317.       goto :Cypher4Square.ConstructMatrix.While1.End
  318.     )
  319.     set /a C4S.y_calc=!C4S.y! %% !C4S.L!
  320.     if "!C4S.y_calc!!C4S.v!"=="0false" (
  321.       set C4S.y=0
  322.       set /a C4S.x+=1
  323.     )
  324.    
  325.     if !C4S._x! GEQ !Cypher4Square.Size! (
  326.       set C4S._x=0
  327.       set /a C4S._y+=1
  328.     )
  329.    
  330.     %Cypher4Square%.Length !C4S.c_word![!C4S.y!] C4S.TL
  331.     set /a C4S.TL-=1
  332.     if !C4S.x! LEQ !C4S.TL! (
  333.       set /a C4S._x+=1
  334.       for %%g in ("!C4S.c_word![!C4S.y!]") do for %%h in ("!C4S.x!") do (
  335.         for %%k in ("C4S.T[!C4S._y!]") do set "%%~k=!%%~k!!%%~g:~%%~h,1!"
  336.       )
  337.     )
  338.    
  339.     set /a C4S.y+=1
  340.     set C4S.v=false
  341.  
  342.   goto :Cypher4Square.ConstructMatrix.While1
  343.   :Cypher4Square.ConstructMatrix.While1.End
  344.   set /a C4S.T.Length=!C4S._y!-1
  345.  
  346.   rem On prépare l'output
  347.   set /a Cypher4Square.TWordIndex=!Cypher4Square.WordIndex!-1
  348.   for %%w in (!Cypher4Square.TWordIndex!) do (
  349.     for /l %%i in (0,1,!C4S.T.Length!) do (
  350.       if defined _ret (
  351.         set _ret=!_ret! ^&
  352.       )
  353.       set _ret=!_ret!set "Cypher4Square.EncryptWord[%%w][%%i]=!C4S.T[%%i]!"
  354.     )
  355.     if defined _ret (
  356.       set _ret=!_ret! ^&
  357.     )
  358.     set _ret=!_ret!set "Cypher4Square.EncryptWord[%%w].Length=!C4S.T.Length!
  359.   )
  360.   (
  361.     endlocal
  362.     %_ret%
  363.   )
  364.  
  365.   rem for /l %%i in (0,1,!Cypher4Square.EncryptWord[0].Length!) do (
  366.  rem   echo;%%i:"!Cypher4Square.EncryptWord[0][%%i]!"
  367.  rem )
  368.  rem Avec "salut", on obtient ceci
  369.  rem 0:"sbgmrz4"
  370.  rem 1:"9',achn"
  371.  rem 2:"v05-é:l"
  372.  rem 3:"diow16_"
  373.  rem 4:"è;uejpx"
  374.  rem 5:"27 ê/tf"
  375.  rem 6:"kqy38.à"
  376.  
  377.  
  378. Exit /b 0
  379.  
  380.  
  381.  
  382.  
  383. :Cypher4Square.getIndex <Matrix(2)> <Char> <Output:Index1> <Output:Index2>
  384.   for /l %%y in (0,1,!Cypher4Square.PSize!) do (
  385.     for /l %%x in (0,1,!Cypher4Square.PSize!) do (
  386.       if "!%~1[%%y]:~%%x,1!"=="%~2" (
  387.         set %~3=%%y
  388.         set %~4=%%x
  389.         Exit /b 0
  390.       )
  391.     )
  392.   )
  393. Exit /b 1
  394.  
  395. :Cypher4Square.Crypt <Message> <Output:EncryptedMessage>
  396.  
  397.   %Cypher4Square%.GetBinome "%~1" Binome
  398.   set /a Binome.Length-=1
  399.  
  400.   set %~2=
  401.  
  402.   for /l %%i in (0,1,!Binome.Length!) do (
  403.  
  404.     set C4S.1=!Binome[%%i]:~0,1!
  405.     set C4S.2=!Binome[%%i]:~1,1!
  406.    
  407.     %Cypher4Square%.getIndex matrix_charset "!C4S.1!" delta_x_1 delta_x_2
  408.     %Cypher4Square%.getIndex matrix_charset "!C4S.2!" delta_y_2 delta_y_1
  409.    
  410.     for %%h in ("!delta_x_1!") do for %%g in ("!delta_y_1!") do set "C4S.a=!Cypher4Square.EncryptWord[0][%%~h]:~%%~g,1!"
  411.     for %%h in ("!delta_y_2!") do for %%g in ("!delta_x_2!") do set "C4S.b=!Cypher4Square.EncryptWord[1][%%~h]:~%%~g,1!"
  412.    
  413.     set %~2=!%~2!!C4S.a!!C4S.b!
  414.    
  415.   )
  416.  
  417. Exit /b 0
  418.  
  419.  
  420. :Cypher4Square.Decrypt <Message> <Output:DecryptedMessage>
  421.  
  422.   %Cypher4Square%.GetBinome "%~1" Binome
  423.   set /a Binome.Length-=1
  424.  
  425.   set %~2=
  426.  
  427.   for /l %%i in (0,1,!Binome.Length!) do (
  428.  
  429.     set C4S.1=!Binome[%%i]:~0,1!
  430.     set C4S.2=!Binome[%%i]:~1,1!
  431.    
  432.     %Cypher4Square%.getIndex Cypher4Square.EncryptWord[0] "!C4S.1!" delta_x_1 delta_x_2
  433.     %Cypher4Square%.getIndex Cypher4Square.EncryptWord[1] "!C4S.2!" delta_y_2 delta_y_1
  434.    
  435.     for %%h in ("!delta_x_1!") do for %%g in ("!delta_y_1!") do set "C4S.a=!matrix_charset[%%~h]:~%%~g,1!"
  436.     for %%h in ("!delta_y_2!") do for %%g in ("!delta_x_2!") do set "C4S.b=!matrix_charset[%%~h]:~%%~g,1!"
  437.    
  438.    
  439.     set %~2=!%~2!!C4S.a!!C4S.b!
  440.    
  441.   )
  442.  
  443.   if "!%~2:~-1!"==" " set %~2=!%~2:~0,-1!
  444.  
  445. Exit /b 0
  446.  
  447.  
  448.  
  449. :Cypher4Square.Length <String> <Output:Length>
  450.   set "stmp=!%~1!#"
  451.   set "len=0"
  452.   for %%P in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  453.     if "!stmp:~%%P,1!" NEQ "" (
  454.       set /a "len+=%%P"
  455.       set "stmp=!stmp:~%%P!"
  456.     )
  457.   )
  458.   set "%~2=!len!"
  459. exit /b 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement