C和Python中的RC4没有给出相同的结果

2024-10-03 23:23:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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}$

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


Tags: 函数字符串程序forfunction互联网rc4swap
1条回答
网友
1楼 · 发布于 2024-10-03 23:23:56

代码段不等价。在PRGA阶段的开始,python代码将b设置为0。C代码不会重新初始化相应的变量,而是使用KSA阶段的剩余部分。其中一个片段一定是错的。我不知道RC4是哪一个。在

相关问题 更多 >