ハードウェア乱数生成

Image from Gyazo

ハードウェア乱数生成

/dev/urandom を使ってランダムなパスワードを生成する方法を読むと、

>env LC_ALL=C tr -dc a-zA-Z0-9 < /dev/random | fold -w 20 |head -1
6drFed868QT6LGyiwqUU

/dev/random

/dev/randomから読み込んだ中には記号も含まれているので、isalnum(buf[i])で文字・数字だけを出力しています。

>gcc makepasswd.c -o makepasswd
>./makepasswd
htC7LG0wjqE1XPo16AGasqLIELhlpyOJp
#include <stdio.h>

int isalnum();

int main()
{
    FILE *fp;
    char buf[128];

    fp = fopen("/dev/random", "rb");
    // fread(保存先, 保存する大きさ,  保存する大きさの個数,読み込み元)
    fread(buf, sizeof(buf), 1, fp);
    for (int i = 0; i < sizeof(buf); i++)
    {
        if (isalnum(buf[i]))
            printf("%c", buf[i]);
    }
    printf("\n");
    return 0;
}