gpt4 book ai didi

c++ - 自己的 RC4 算法给出错误的输出

转载 作者:行者123 更新时间:2023-11-28 00:29:22 26 4
gpt4 key购买 nike

我编写了以下 RC4 算法的实现,其中 keyOpenSSL 中给出的 RC4_KEY 结构。图书馆。 m_key 是包含设置 key 的 QByteArray。对于这个测试,我一直使用“teste”作为键。如您所见,我还有两个 QByteArrays,其中一个保存原始(输入)数据,另一个保存加密(输出)数据。

void rc4SetKey() {
for (int i = 0; i < 256; ++i) {
key.data[i] = i;
}
for (int i = 0; i < 256; ++i) {
int j = (j + key.data[i] + m_key[i % m_key.length()]) % 256;
std::swap(key.data[i], key.data[j]);
}
}

void rc4Encrypt(QByteArray &in, QByteArray &out) {
out.clear();
out.resize(in.length());
for (int n = 0; n < in.length(); ++n) {
int i = (i + 1) % 256;
int j = (j + key.data[i]) % 256;
std::swap(key.data[i], key.data[j]);
int rand = key.data[(key.data[i] + key.data[j]) % 256];
out[n] = rand ^ in[n];
}
}

出于测试目的,我使用了包含以下数据(十六进制)的文本文件:

31 32 33 34 35 36 37 38 38 39 31 30 0a

使用 online tool或 OpenSSL 函数,我得到以下输出(键:“teste”):

6a 9d ae b6 17 61 7b 71 5f f7 46 f0 ab

然而,使用我自己的实现,我得到以下信息:

52 ec c2 b1 3d ca 6b 55 50 54 30 e7 ed

我现在已经花了很多时间查看了各种伪代码或实现,但我仍然无法弄清楚哪里出了问题。

最佳答案

这个表达式(在 set-key 和 encrypt 函数中)是非法的(在打开所有警告的情况下编译应该已经指出):

 int j = (j + ...

除了胡说八道(试图在初始化时引用变量的值)之外,它与算法定义不匹配 - j 应该在循环外声明而不是重置在每次迭代中。

下面应该修复按键设置功能。加密函数的修复几乎相同(它还需要 i 以相同的方式修复)。

int j = 0;
for (int i = 0; i < 256; ++i) {
j = (j + key.data[i] + m_key[i % m_key.length()]) % 256;
std::swap(key.data[i], key.data[j]);
}

关于c++ - 自己的 RC4 算法给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23503721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com