3

私は次のアルゴリズムを持っており、lua に実装したいと考えています。lua でビット演算を実装する方法をロックしています。

void wepkey64(char *passphrase, unsigned char k64[4][5])
{
    unsigned char pseed[4] = {0};
    unsigned int randNumber, tmp;
    int i, j;

    for(i = 0; i < strlen(passphrase); i++)
    {
        pseed[i%4] ^= (unsigned char) passphrase[i];
    }

    randNumber = pseed[0] | (pseed[1] << 8) | (pseed[2] << 16) | (pseed[3] << 24);

    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 5; j++)
        {
            randNumber = (randNumber * 0x343fd + 0x269ec3) & 0xffffffff;
            tmp = (randNumber >> 16) & 0xff;
            k64[i][j] = (unsigned char) tmp;
        }
    }
}

lua scipting でこの関数に相当するものは何ですか? 特にビット演算

4

3 に答える 3

1

最近のバージョンの lua はすでにこのhttp://www.lua.org/manual/5.2/manual.html#6.7をサポートしていますが、古いバージョンで行き詰まっている場合は、次のようにします。

randNumber = pseed[0] | (pseed[1] << 8) | (pseed[2] << 16) | (pseed[3] << 24); の等価物ですpseed[0] + (pseed[1] * 256) + (pseed[2] * 65536) + (pseed[3] * 16777216)

tmp = (randNumber >> 16) & 0xff;と同等です(randnumber / 65536) % 0x100(これは、整数の div およびモジュラス操作になります)

randNumber = (randNumber * 0x343fd + 0x269ec3) & 0xffffffff;およそ `(randNumber * 0x343fd + 0x269ec3) % 0x100000000 です。

XOR (^) は、A^B=A+B-2(A&B) として実装できます。

于 2013-05-10T09:25:40.000 に答える