gpt4 book ai didi

c - 将 XOR 作为宏实现,但未按预期工作

转载 作者:太空宇宙 更新时间:2023-11-04 05:33:19 25 4
gpt4 key购买 nike

我有一个输入字符串 CHAR cszReadBuffer[1000]XOR 操作应用于它,键为 CHAR cszReadKeyBuffer[10] ,实际上我从包含如下的两个文件中读取了 keybuffer

关键文件内容:

abcd

输入文件内容:

aaaaaddddrrrttt
bbbbrfgergv
b
eeerwef

当我读取 keybuffer 的大小和内容时,它们绝对正确,如下所示:

dwKeyFileLength(key length) is 4 byte
dwLastBitChunk(input-file length) is 40 byte

内容(cszReadBuffercszReadKeyBuffer)与上述文件中的内容相同。

现在,通过以下实现,XOR 加密和解密工作正常:

for(int i = 0;i < dwLastBitChunk;i++)
cszReadBuffer[i] = cszReadBuffer[i] ^ cszReadKeyBuffer[i % dwKeyFileLength];

加密输出:

̀Ԃ؀စᘑᘕ椗k؁ဃ̅ငሄ桬椁ݫĆᔓȆ

我还有另一个实现如下 macro :

#define   XOR(data, key) \
LONG lKeySize = lstrlenA(key); \
for(int i = 0;i < lstrlenA(data);i++) \
data[i] = data[i] ^ key[i % lKeySize]; \

但是当我改用 macro 时:

XOR(cszReadBuffer, cszReadKeyBuffer)

(只是为了加密)它给我下面的输出:

 aaaaddddrrrttt
bbbbrfgergv
b
eeerwef

我想知道为什么会这样?有什么建议吗?

最佳答案

您在每个循环中计算 lstrlenA(data),但 data 正在变化。

输入的第一个字符和key是'a'所以

'a' ^ 'a' ==> 0

所以循环只迭代一次。您必须使用先前设置的变量来打印加密字符串。

在循环外计算字符串长度,就像您在成功示例中所做的那样。

关于c - 将 XOR 作为宏实现,但未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51721867/

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