Vigenèrova šifra je polyalfabetickou šifrou, ve které šifrovaný text vzniká modulárním přičtením hesla k otevřenému textu. Šifrování lze proto vyjádřit vzorcem

C_{i} \\equiv T_{i} + K_{i} \\pmod {m}
Ci - i-tý znak šifrovaného textu
Ti - i-tý znak otevřeného textu
Ki - i-tý znak hesla textu (v případě, že je heslo kratší než text (což je obvyklé) dochází k opakování hesla)
m - délka abecedy

Dešifrování

K dešifrování dochází analogicky - modulárním odečtením hesla od šifrovaného textu.

T_{i} \\equiv C_{i} - K_{i} \\pmod {m}
Ti - i-tý znak otevřeného textu
Ci - i-tý znak šifrovaného textu
Ki - i-tý znak hesla textu (v případě, že je heslo kratší než text (což je obvyklé) dochází k opakování hesla)
m - délka abecedy

Vigenèrův čtverec

Pro zjednodušení modulárních operací se často používá tzv. Vigenèrův čtverec. Svojí logikou zcela odpovídá vzorcům uvedeným výše. Při šifrování vždy nalezneme znak otevřeného textu na vodorovné a znak hesla na svislé ose, jejich průsečíkem je znak šifrovaného textu. Při dešifrování v řádku odpovídajícímu příslušnému písmenu hesla nalezneme dané písmeno šifrovaného textu, otevřený text pak odpovídá označení sloupce.

ABCDEFGHIJKLMNOPQRSTUVWXYZ
AABCDEFGHIJKLMNOPQRSTUVWXYZ
BBCDEFGHIJKLMNOPQRSTUVWXYZA
CCDEFGHIJKLMNOPQRSTUVWXYZAB
DDEFGHIJKLMNOPQRSTUVWXYZABC
EEFGHIJKLMNOPQRSTUVWXYZABCD
FFGHIJKLMNOPQRSTUVWXYZABCDE
GGHIJKLMNOPQRSTUVWXYZABCDEF
HHIJKLMNOPQRSTUVWXYZABCDEFG
IIJKLMNOPQRSTUVWXYZABCDEFGH
JJKLMNOPQRSTUVWXYZABCDEFGHI
KKLMNOPQRSTUVWXYZABCDEFGHIJ
LLMNOPQRSTUVWXYZABCDEFGHIJK
MMNOPQRSTUVWXYZABCDEFGHIJKL
NNOPQRSTUVWXYZABCDEFGHIJKLM
OOPQRSTUVWXYZABCDEFGHIJKLMN
PPQRSTUVWXYZABCDEFGHIJKLMNO
QQRSTUVWXYZABCDEFGHIJKLMNOP
RRSTUVWXYZABCDEFGHIJKLMNOPQ
SSTUVWXYZABCDEFGHIJKLMNOPQR
TTUVWXYZABCDEFGHIJKLMNOPQRS
UUVWXYZABCDEFGHIJKLMNOPQRST
VVWXYZABCDEFGHIJKLMNOPQRSTU
WWXYZABCDEFGHIJKLMNOPQRSTUV
XXYZABCDEFGHIJKLMNOPQRSTUVW
YYZABCDEFGHIJKLMNOPQRSTUVWX
ZZABCDEFGHIJKLMNOPQRSTUVWXY
Vigenèrův čtverec

Frekvenční analýza Vigenèrovy šifry

Pokud známe délku hesla (X), tak můžeme provést frekvenční analýzu na každém X-tém znaku (heslo se opakuje). Nyní postupujeme stejně jako u analýzy Caesarovy šifry - porovnáním frekvence znaků otevřeného a šifrovaného textu zjistíme posun (písmeno hesla) a jsme schopni okamžitě dešifrovat.


Příklad

OT: KULTURNIATASEJESPION
Heslo: PES
26 znaků abecedy

Šifrování

 K + P = 10 + 15 = 25 = Z
 U + E = 20 + 4  = 24 = Y
 L + S = 11 + 18 = 3  = D
 T + P = 19 + 15 = 8  = I
 U + E = 20 + 4  = 24 = Y
 R + S = 17 + 18 = 9  = J
 N + P = 13 + 15 = 2  = C
 I + E = 8  + 4  = 12 = M
 A + S = 0  + 18 = 18 = S
 T + P = 19 + 15 = 8  = I
 A + E = 0  + 4  = 4  = E
 S + S = 18 + 18 = 10 = K
 E + P = 4  + 15 = 19 = T
 J + E = 9  + 4  = 13 = N
 E + S = 4  + 18 = 22 = W
 S + P = 18 + 15 = 7  = H
 P + E = 15 + 4  = 19 = T
 I + S = 8  + 18 = 0  = A
 O + P = 14 + 15 = 3  = D
 N + E = 13 + 4  = 17 = R
 

ŠT: ZYDIYJCMSIEKTNWHTADR

Dešifrování

ŠT: ZYDIYJCMSIEKTNWHTADR
Heslo: PES
26 znaků abecedy

 Z - P = 25 - 15 = 10 = K
 Y - E = 24 - 4  = 20 = U
 D - S = 3  - 18 = 11 = L
 I - P = 8  - 15 = 19 = T
 Y - E = 24 - 4  = 20 = U
 J - S = 9  - 18 = 17 = R
 C - P = 2  - 15 = 13 = N
 M - E = 12 - 4  = 8  = I
 S - S = 18 - 18 = 0  = A
 I - P = 8  - 15 = 19 = T
 E - E = 4  - 4  = 0  = A
 K - S = 10 - 18 = 18 = S
 T - P = 19 - 15 = 4  = E
 N - E = 13 - 4  = 9  = J
 W - S = 22 - 18 = 4  = E
 H - P = 7  - 15 = 18 = S
 T - E = 19 - 4  = 15 = P
 A - S = 0  - 18 = 8  = I
 D - P = 3  - 15 = 14 = O
 R - E = 17 - 4  = 13 = N
 

OT: KULTURNIATASEJESPION


Kód

 /**
  * Vigenerova sifra - demonstrace
  * @author Pavel Micka
  */
 public class VigenereCipher {
     /**
      * Zasifruje text Vigenerovou sifrou
      * @param s otevreny text
      * @param key klic (jen velka pismena)
      * @return zasifrovany text (jen velka pismena)
      */
     public static String encipher(String s, String key){
         StringBuilder builder = new StringBuilder();
         for(int i = 0; i < s.length(); i ++){
             if(s.charAt(i) < 65 || s.charAt(i) > 90){ //znak v ASCII
                 throw new IllegalArgumentException("" +
                         "Sifrovany retezec neobsahuje jen velka pismena");
             }
             //modularne pricteme shift
             char encyphered = s.charAt(i) + getShift(key, i) > 90 ? (char)((s.charAt(i) + getShift(key, i)) - 26) : (char)(s.charAt(i) + getShift(key, i));
             builder.append(encyphered);
         }
         return builder.toString();
     }
     /**
      * Desifruje dany zasiforvany text Vigenerovou sifrou
      * @param s zasifrovany text
      * @param key klic
      * @return otevreny text
      */
     public static String decipher(String s, String key){
         StringBuilder builder = new StringBuilder();
         for(int i = 0; i < s.length(); i ++){
             if(s.charAt(i) < 65 || s.charAt(i) > 90){ //znak v ASCII
                 throw new IllegalArgumentException("" +
                         "Desifrovany retezec neobsahuje jen velka pismena");
             }
             //modularne odecteme shift
             char decyphered = s.charAt(i) - getShift(key, i) < 65 ? (char)((s.charAt(i) - getShift(key, i)) + 26) : (char)(s.charAt(i) - getShift(key, i));
             builder.append(decyphered);
         }
         return builder.toString();
     }
     /**
      * Zjisti shift
      * @param key klic
      * @param i pozice v textu
      * @return shift
      */
     private static int getShift(String key, int i) {
             if(key.charAt(i % key.length()) < 65 || key.charAt(i % key.length()) > 90){ //znak v ASCII
                 throw new IllegalArgumentException("" +
                         "Klic retezec neobsahuje jen velka pismena");
             }
         return ((int)key.charAt(i % key.length())) - 65;
     }
     
     public static void main(String[] args){
         String text = "KULTURNIATASEJESPION";
         String key = "PES";
         String enciphered = encipher(text, key);
         System.out.println(enciphered);
         System.out.println(decipher(enciphered, key));
     }
 }
 

SEO od společnosti Digital Pylon


Online casino s algoritmem

České casino online online slot-vegas.cz

Hrajte nejlepší hry jako je GoodGame Empire.





Zajímavé články: Jak najít práci snů? Zvolte kariéru v IT!, Češi mají rádi hrací automaty online, Jak funguje algoritmické obchodování Casino, Online výuka Algoritmus a online marketing mají svá pravidla, Automaty, Matematický vliv, Ratings, Jak fungují algoritmy hazardních her online: více znalostí, více peněz, SYPWAI - nástroj pro vědecký vývoj, Vynikají na globálním trhu: Nejlepší vývojáři softwaru pro online výherní automaty, Jak si vybrat nejlepší české online casino, Proč byste měli hrát online casino VPN revoluce, Kde najdeme algoritmy v každodenním životě?, Čeká vás pracovní pohovor mimo město? Podívejte se, jak dokonale zvládnout včasný příchod, 5 úžasných technologií ze světa hazardních her, Mirror and access to Mostbet, Svou kancelář můžete mít stále po ruce, Jaké výhody má digitalizovaná firma oproti off-line konkurenci?, Jaký systém vybrat pro snadné řízení výroby?, Nahradí umělá inteligence ajťáky?, Důvody, proč používat SnapTik ke stahování videí TikTok, Dokonalý den na pláži: Co si vzít s sebou, aby byl výlet zábavný a bezpečný?, Jak přežít dlouhý let?, Go pay GoodGame Empire, Blockchain, Rozhovor


Doporučujeme

Internet pro vaši firmu na míru

https://www.algoritmy.net