Heres the one from wikipedia...
unsigned char S[256];
unsigned int i, j;
void swap(unsigned char *s, unsigned int i, unsigned int j) {
unsigned char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
/* KSA */
void rc4_init(unsigned char *key, unsigned int key_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 */
unsigned char rc4_output() {
i = (i + 1) & 255;
j = (j + S[i]) & 255;
swap(S, i, j);
return S[(S[i] + S[j]) & 255];
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
int main() {
unsigned char *test_vectors[][2] =
{
{"Key", "Plaintext"},
{"Wiki", "pedia"},
{"Secret", "Attack at dawn"}
};
int x;
for (x = 0; x < ARRAY_SIZE(test_vectors); x++) {
int y;
rc4_init(test_vectors[x][0], strlen((char*)test_vectors[x][0]));
for (y = 0; y < strlen((char*)test_vectors[x][1]); y++)
printf("%02X", test_vectors[x][1][y] ^ rc4_output());
printf("\n");
}
return 0;
}
Edit:
Code I have so far which is failing
#include <stdio.h>
void swap(char *a, char *B);
int main() {
int i;
int j = 0;
int temp;
char s[256];
char key[] = "Test";
char data[] = "Hello";
for (i = 0; i < 256; ++i)
s[i] = i;
for (i = 0; i < 256; ++i) {
j = (j + s[i] + key[i%4]) % 256;
swap(&s[i], &s[j]);
}
i = (i+1) % 256;
j = (j + s[i]) % 256;
swap(&s[i], &s[j]);
// I don't know where to go from here....
}
void swap(char *a, char *B) {
int temp;
temp = *a
*a = *b;
*b = temp;
}
This post has been edited by awfa3: 11 January 2010 - 08:58 PM

New Topic/Question
Reply




MultiQuote




|