k++, i = (i+1) % t, j = (j+1) % c)
A = S[i] = ROTL(S[i] + (A + B), 3); B = L[j] = ROTL(L[j] + (A + B), (A + B));
Szyfrowanie Szyfrowanie składa się z kilku rund prostej funkcji. Zaleca się stosowanie 12 lub 20 rund, w zależności od oczekiwanego poziomu bezpieczeństwa i czasu. Poza parametrami zdefiniowanymi powyżej, w przedstawionym algorytmie wykorzystuje się również następujące zmienne:
A, B – Dwa słowa, tworzące blok tekstu jawnego, poddawanego szyfrowaniu
A = A + S B = B + S for i = 1 to r do: A = ((A ^ B) <<< B) + S[2 * i] B = ((B ^ A) <<< A) + S[2 * i + 1]
# Szyfrogram zawiera dwuwyrazowy blok, składający się kolejno ze słów: A oraz B. return A, B
Przykład w języku C:
void RC5_ENCRYPT(WORD *pt, WORD *ct) { WORD i, A = pt + S, B = pt + S;
for(i = 1; i <= r; i++)
A = ROTL(A ^ B, B) + S[2*i]; B = ROTL(B ^ A, A) + S[2*i + 1];
ct = A; ct = B; }
Odszyfrowywanie Odszyfrowywanie jest stosunkowo prostym odwróceniem procesu szyfrowania, co przedstawiono w poniższym pseudokodzie:
for i = r down to 1 do: B = ((B - S[2 * i + 1]) >>> A) ^ A A = ((A - S[2 * i]) >>> B) ^ B B = B - S A = A -