gpt4 book ai didi

python - C 和 Python 中的 RC4 不会给出相同的结果

转载 作者:行者123 更新时间:2023-11-30 15:22:52 30 4
gpt4 key购买 nike

我在C中使用RC4已经很长时间了(我在互联网上找到的简单函数),最近我想在python中进行字符串加密并将其移动到C程序中,所以我找到了相同的函数在Python中,但它没有给出与C函数相同的结果这是两个函数:

C:

LPBYTE RC4(LPBYTE lpBuf, LPBYTE lpKey, DWORD dwBufLen, DWORD dwKeyLen){
INT a, b = 0, s[256];
BYTE swap;
DWORD dwCount;
for(a = 0; a < 256; a++){
s[a] = a;
}
for(a = 0; a < 256; a++){
b = (b + s[a] + lpKey[a % dwKeyLen]) % 256;
swap = s[a];
s[a] = s[b];
s[b] = swap;
}

a = b = 0

for(dwCount = 0; dwCount < dwBufLen; dwCount++){
a = (a + 1) % 256;
b = (b + s[a]) % 256;
swap = s[a];
s[a] = s[b];
s[b] = swap;
lpBuf[dwCount] ^= s[(s[a] + s[b]) % 256];
}
return lpBuf;
}

Python:

def rc4(data , key):
S = list(range(256))
b = 0
out = []

#KSA Phase
for a in range(256):
b = (b + S[a] + ord( key[a % len(key)] )) % 256
S[a] , S[b] = S[b] , S[a]

#PRGA Phase
a = b = 0
for dwCount in data:
a = ( a + 1 ) % 256
b = ( b + S[a] ) % 256
S[a] , S[b] = S[b] , S[a]
out.append(chr(ord(dwCount) ^ S[(S[a] + S[b]) % 256]))

return ''.join(out)

那么,为什么这两个函数加密后的字符串不一样呢?

最佳答案

这些片段并不等效。在 PRGA 阶段开始时,Python 代码将 b 设置为 0。C 代码不会重新初始化相应的变量,而是使用 KSA 阶段剩余的变量。其中一个片段肯定是错误的。我不知道RC4能告诉我是哪一个。

关于python - C 和 Python 中的 RC4 不会给出相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998546/

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