Нашел реализацию rc4 для JS, по аналогии написал для С++. В js шифрую 1234 с ключом 1, получаю результат. Копирую результат из вкладки браузер, вставляю в алгоритм на С++, пробую расшифровать но всегда ошибка в один символ. Не могу найти где я ошибся и почему ошибка. Может быть дело в кодировке?
function rc4(key, str) {
var s = [], j = 0, x, res = '';
for (var i = 0; i < 256; i++) {
s[i] = i;
}
for (i = 0; i < 256; i++) {
j = (j + s[i] + key.charCodeAt(i % key.length)) % 256;
x = s[i];
s[i] = s[j];
s[j] = x;
}
i = 0;
j = 0;
for (var y = 0; y < str.length; y++) {
i = (i + 1) % 256;
j = (j + s[i]) % 256;
x = s[i];
s[i] = s[j];
s[j] = x;
res += String.fromCharCode(str.charCodeAt(y) ^ s[(s[i] + s[j]) % 256]);
}
return res;
}
var key = "1";
var str = "1234";
Результат шифрования: Q(ñY
int main()
{
string key = "1";
string text = "Q(ñY";
string code = string();
code = my_rc4((char*)key.c_str(), key.size(), (char*)text.c_str(), text.size());
cout << "text: " << text << "\n";
cout << "code: " << code << "\n";
system("pause");
return 0;
}
string my_rc4(char* key, size_t key_size, char* text, size_t text_size)
{
int s[256];
int j = 0;
int x = int();
string res = string();
for (size_t i = 0; i < 256; ++i)
{
s[i] = i;
}
for (size_t i = 0; i < 256; ++i)
{
j = (j + s[i] + (int)key[i % key_size]) % 256;
x = s[i];
s[i] = s[j];
s[j] = x;
}
int i = 0;
j = 0;
for (int y = 0; y < text_size; ++y)
{
i = (i + 1) % 256;
j = (j + s[i]