#include #include #include void RC4_Init(unsigned char* key, size_t keyLength, unsigned char* S) { int i, j = 0; unsigned char temp; for (i = 0; i < 256; i++) { S[i] = i; } for (i = 0; i < 256; i++) { j = (j + S[i] + key[i % keyLength]) % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; } } void RC4_Crypt(unsigned char* message, size_t messageLength, unsigned char* S) { int i = 0, j = 0, k; unsigned char temp, t; for (k = 0; k < messageLength; k++) { i = (i + 1) % 256; j = (j + S[i]) % 256; temp = S[i]; S[i] = S[j]; S[j] = temp; t = (S[i] + S[j]) % 256; message[k] ^= S[t]; } } int main() { unsigned char key[] = "MySecretKey"; unsigned char message[] = "Hello, RC4!"; size_t keyLength = strlen((char*)key); size_t messageLength = strlen((char*)message); unsigned char S[256]; RC4_Init(key, keyLength, S); RC4_Crypt(message, messageLength, S); printf("暗号化されたメッセージ: "); for (size_t i = 0; i < messageLength; i++) { printf("%02X ", message[i]); } printf("\n"); RC4_Crypt(message, messageLength, S); printf("復号化されたメッセージ: %s\n", message); return 0; }