RC4, в чем я ошибся?

Нашел реализацию 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]
  • Вопрос задан
  • 484 просмотра
Пригласить эксперта
Ответы на вопрос 1
BacCM
@BacCM
C++ почти с рождения
У тебя код не полностью приведен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы