计算第二个RC4密钥字节为0x00的事件的频率
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算第二个RC4密钥字节为0x00的事件的频率相关的知识,希望对你有一定的参考价值。
我想生成超过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
",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+1,sbox[(sbox[i] + sbox[j]) % 32]);
}
}
return (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,实际上不会以这种方式生成密钥。
以上是关于计算第二个RC4密钥字节为0x00的事件的频率的主要内容,如果未能解决你的问题,请参考以下文章