Jabarkan Ekspansi kunci dari Enkripsi RC5

Algoritme ekspansi kunci diilustrasikan seperti di bawah ini

Mengikuti skema dalam The RC5 Encryption Algorithm.

w - Panjang kata dalam bit, biasanya 16, 32 atau 64. Enkripsi dilakukan dalam blok 2 kata.

u = w / 8 - Panjang kata dalam byte.

b - Panjang kunci dalam byte.

K [] - Kuncinya, dianggap sebagai array byte (menggunakan pengindeksan berbasis 0).

c - Panjang kunci dalam kata-kata (atau 1, jika b = 0).

L [] - Array kerja sementara yang digunakan selama penjadwalan kunci. diinisialisasi ke tombol kata-kata.

r - Jumlah putaran yang digunakan saat mengenkripsi data.

t = 2 (r + 1) - jumlah subkunci putaran yang diperlukan.

S [] - Kata-kata kunci subkunci bulat.

Pw - Konstanta sulap pertama, didefinisikan sebagai {\ displaystyle Odd ((e-2) * 2 ^ {w})} Odd ((e-2) * 2 ^ {w}), di mana Odd adalah bilangan bulat ganjil terdekat dari input yang diberikan, e adalah basis dari logaritma natural, dan w didefinisikan di atas. Untuk nilai umum w, nilai terkait Pw diberikan di sini dalam heksadesimal: w = 16: 0xB7E1, w = 32: 0xB7E15163, w = 64: 0xB7E151628AED2A6B

Qw - Konstanta sulap kedua, didefinisikan sebagai {\ displaystyle Odd ((\ phi -1) * 2 ^ {w})} Odd ((\ phi - 1) * 2 ^ w), di mana Odd adalah bilangan bulat ganjil terdekat dari input yang diberikan, di mana {\ displaystyle \ phi} \ phi adalah rasio emas, dan w didefinisikan di atas. Untuk nilai umum w, nilai terkait Qw diberikan di sini dalam heksadesimal: w = 16: 0x9E37, w = 32: 0x9E3779B9, w = 64: 0x9E3779B97F4A7C15

# Break K into words

# u = w / 8

c = ceiling( max(b, 1) / u )

# L is initially a c-length list of 0-valued w-length words

for i = b-1 down to 0 do:

L[i/u] = (L[i/u] <<< 8) + K[i]

# Initialize key-independent pseudorandom S array

# S is initially a t=2(r+1) length list of undefined w-length words