43 lines
1.0 KiB
C++
43 lines
1.0 KiB
C++
#include "Crypt.h"
|
|
|
|
void RC4Init(unsigned char* key, unsigned char* S, int keyLength) {
|
|
int i, j = 0;
|
|
unsigned char temp;
|
|
|
|
for (i = 0; i < 256; i++) {
|
|
S[i] = (unsigned char)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 RC4EncryptDecrypt(unsigned char* data, int dataLength, unsigned char* S) {
|
|
int i = 0, j = 0, k;
|
|
unsigned char temp;
|
|
|
|
for (k = 0; k < dataLength; k++) {
|
|
i = (i + 1) % 256;
|
|
j = (j + S[i]) % 256;
|
|
|
|
temp = S[i];
|
|
S[i] = S[j];
|
|
S[j] = temp;
|
|
|
|
data[k] ^= S[(S[i] + S[j]) % 256];
|
|
}
|
|
}
|
|
|
|
void EncryptRC4(unsigned char* data, int dataLength, unsigned char* key, int keyLength) {
|
|
unsigned char S[256];
|
|
RC4Init(key, S, keyLength);
|
|
RC4EncryptDecrypt(data, dataLength, S);
|
|
}
|
|
|
|
void DecryptRC4(unsigned char* data, int dataLength, unsigned char* key, int keyLength) {
|
|
EncryptRC4(data, dataLength, key, keyLength);
|
|
} |