Bilalbudiluhur
Bergabung 29 Mei 2019
Konten dihapus Konten ditambahkan
→RC4: bagian baru Tag: Suntingan visualeditor-wikitext |
Tag: Suntingan visualeditor-wikitext |
||
Baris 12:
= Implementasi dari Algoritma RC4 =
Banyak stream cipher dibuat berdasarkan LinearFeedback Shift Registers (LFSRs) yang efisien diperangkat keras namun kurang efisien dalam perangkatlunak. Desain dari RC4 menghindari penggunaan LFSRs,dan algoritma ini ideal untuk implementasi perangkatlunak karena hanya menggunakan manipulasi byte.Algoritma ini menggunakan 256 byte memori untukkunci, yaitu key[0] sampai key[k-1], dan variabel integer i, j, dan y. Reduksi modular dari beberapa nilai modulo256 dapat dilakukan dengan sebuah bitwise AND dengan 255 (yang ekuivalen untuk mengambil byte dengan orderendah dari nilai di pertanyaan).Berikut ini adalah implementasinya dalam bahasa C.
unsignedcharS[256];
unsignedinti,j;
voidswap(unsignedchar*s,unsignedinti,unsignedintj){
unsignedchartemp =s[i];
s[i]=s[j];
s[j]=temp;}
/* KSA */
voidrc4_init(unsignedchar*key,
unsignedintkey_length){
for(i =0;i <256;i++)
S[i]=i; for(i =j =0;i <256;i++){
j =(j +key[i %key_length]+S[i])&255;
swap(S,i,j); } i =j =0;}
/* PRGA */
unsignedcharrc4_output(){
i =(i +1)&255;
j =(j +S[i])&255;
swap(S,i,j);
returnS[(S[i]+S[j])&255];
}
#include <stdio.h>
intmain(){
intk,output_length;
unsignedcharkey[]="Secret";
// key hardcoded to "Secret" output_length =10;
// number of bytes of output desired rc4_init(key,6);
// length of key is 6 in this case k =0;
while(k <output_length){ printf("%c",rc4_output());
k++;
}}
|