我在C语言中使用RC4已经很长时间了(我在互联网上找到了一个简单的函数),最近,我想用python来做字符串加密并将它移到C程序中,所以我在python中找到了相同的函数,但它的结果与C function不一样 这两种功能如下:
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:
^{pr2}$那么,为什么这两个函数的加密字符串不一样呢?在
代码段不等价。在PRGA阶段的开始,python代码将
b
设置为0。C代码不会重新初始化相应的变量,而是使用KSA阶段的剩余部分。其中一个片段一定是错的。我不知道RC4是哪一个。在相关问题 更多 >
编程相关推荐