RC5 šifra
  
  
  
   
 
RC5 kalkulačka:
 
 
 
 Legenda: 
   - veškerý textový vstup se zadává hexadecimálně (neudává se žádná předpona
typu '0x' apod.) kromě počtu kol, který  je decimálně
 
   - čísla za textovými poli znamenají počet zadaných bytů / počet potřebných
 bytů   (1 byte odpovídají 2 znaky)
 
   - velikost klíče musí být násobkem velikosti slova !!!
    
   - tlačítko 'Zašifruj' zašifruje vstup pomocí klíče a zobrazí na výstup
 
   - tlačítko 'Dešifruj' dešifruje (trochu paradoxně) výstup pomocí klíče
 a zobrazí na vstup
 
 
 
  Algoritmus:
  
          Zde jsou úryvky kódu, který by měl naznačit princip šifry a její
 jednoduchost. Kód je zapsán v symbolickém zápisu. Pro RC5 jsou určující
tyto  parametry:
   
    - velikost slova w  (může být obecně libovolná, v praxi se běžně
 využívá 32, popř. 64 bitů)
 
    - počet kol hlavní šifrovací smyčky rounds
 
    - velikost klíče key, dále označovaná jako b
 
   
          Označení typu šifry se potom uvádí ve formátu  RC5-
w/
rounds  /
b. Typická šifra je například RC5-32/12/16.
  
          
Vysvětlení použitých proměnných a jejich typů:
          Proměnné 
A a 
B představují vstup algoritmu. Obě jsou
 o veliskosti jednoho slova (
w bitů). Pole bytů 
key obsahuje
 klíč, podle kterého se bude vstup šifrovat. Hlavní smyčka šifrování se provede
 právě tolikrát, kolik je v proměnné 
rounds. Dále jsou použita pole
 
L o velikosti 
t = 2 * (
rounds + 1) a pole 
S
o  velikosti 
c = 
b / 
u, kde 
b je velikost klíče
 key a 
u = 
w / 8. Obě pole jsou typu pole slov, kde
slovo  má 
w bitů.
  
          
Vysvětlení některých použitých operací:
          A <<< B        levá neznaménková rotace argumentu 
A
   o 
B bitů
          A + B             součet 
A + 
B, který se chápe jako
 modulo 2
w, tzn. počítá se s přetečením proměnné s výsledkem,
 která je stejného typu jako operandy
          A ^ B             
A XOR 
B  (jako v jazyce C)
          A % B            
A modulo 
B (jako v jazyce C)
  
  
  
Konverze klíče z bytů do wordů:
  
      for i = (b - 1) downto 0
          L [i / u] = (L [i / u] <<< 8) + key [i];
  
  
Inicializace pole S:
  
      S [0] = P
w;
      for i = 1 to (t - 1)
          S [i] = S [i - 1] + Q
w;
  
  
Zamíchání klíče do pole S:
  
      i = j = 0;
      A = B = 0;
      do 3 * max (t, c) times:
          A = S [i] = (S [i] + A + B) <<< 3;
          B = L [j] = (L [j] + A + B) <<< (A + B);
          i = (i + 1) % t;
          j = (j + 1) % c;
  
  
Hlavní šifrovací smyčka:
  
       A += S [0];
       B += S [1];
  
       for i = 1 to rounds do
           A = ( (A ^ B) <<< B) + S [2 * i];
           B = ( (B ^ A) <<< A) + S [2 * i + 1];