计算第二个RC4密钥字节为0x00的事件的频率

问题描述 投票:0回答:1

我想生成超过10000个随机密钥K(32个字节)并需要将它们用于RC4并且需要计算第二个RC4密钥字节为0x00的事件的频率。

我编码这个解决方案我是对的吗?

#include <stdio.h>

    int main (void)
    {
        int i = 0, j = 0;
        int sbox [256];
        int key [32];

        char *key_str = "abcdefghijklmnopqrstuvwxyz";

        int tmp = 0;
        int n = 0;

        fprintf (stdout,"Key string is %s\n",key_str);
        for (i=0; i<32; i++)
        {
            key[i] = key_str[i%5];
            sbox[i] = i;
        }

        j = 0;
        for (i=0; i<32; i++)
        {
            j += sbox[i] + key[i];
            j = j % 32;
            tmp = sbox[i];
            sbox[i] = sbox[j];
            sbox[j] = tmp;
        }


        i = 0;
        j = 0;
        for (n=0; n<10000; n++)
        {

            i++;
            i = i % 32;
            j += sbox[i];
            j = j % 32;
            tmp = sbox[i];
            sbox[i] = sbox[j];
            sbox[j] = tmp;

            if ((n == 0) || (n == 99) || (n == 999) || (n == 9999))
            {
                fprintf (stdout,"byte %d is %0x00\n",
                        n+1,sbox[(sbox[i] + sbox[j]) % 32]);
            }
        }       
        return (0);
    }
c algorithm encryption
1个回答
0
投票

您的问题没有多大意义,但以下代码生成10,000个随机32字节密钥,然后计算生成密钥的次数,其中第二个字节为零:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int run_test() {
    int c = 0;

    for (int i = 0; i < 10000; i++) {
        char buf[32];

        for (int j = 0; j < 32; j++) {
            buf[j] = rand();
        }

        if (buf[1] == 0x00) { c++; }
    }

    return c;
}

int main(int argc, char* argv[]) {
    srand(time(NULL));
    printf("%d", run_test());
}

免责声明:此处未使用CSPRNG,实际上不会以这种方式生成密钥。

© www.soinside.com 2019 - 2024. All rights reserved.