Implementazione dell'algoritmo RC4
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void gestione(unsigned char *s,char *k,int l){
int i=0,j=0,t=0;
for(i=0;i<256;i++){
s[i]=i;
}
for(i=0;i<256;i++){
j=(j+s[i]+k[i%l])%256;
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
void cifra(unsigned char *s,unsigned char *output,int l,char *input){
int i=0,j=0,k=0,t=0;
for(k=0;k<l;k++){
i=(i+1)%256;
j=(j+s[i])%256;
t=s[i];
s[i]=s[j];
s[j]=t;
output[k]=s[(s[i]+s[j])%256]^input[l];
}
}
main()
{
char stringa[50],chiave[20];
unsigned char risultato[50],s_box[256];
int i=0;
printf("Input:");
gets(stringa);
printf("Chiave:");
gets(chiave);
gestione(s_box,chiave,strlen(chiave));
cifra(s_box,risultato,strlen(stringa),stringa);
printf("\nOutput:");
for(i=0;i<strlen(stringa);i++){
printf("%X ",risultato[i]^stringa[i]);
}
printf ("\n\n");
}
gestione() ---> Inizializza l'S-box
cifra() ---> Usato per cifrare e decifrare
Risultato in esadecimale