コードをいじっていますが、keyの作成方法を変えました。
key streamの出力の偏りを調べることをやっているので、keyとnonceをランダムに決定して、そこからkey streamを作っています。
前のゼミで「key streamから次のkeyを決めてはどうか?」と言われたので、色々考えてやっています。
[cpp] /次のkeyとnonceを作成する。 int dice(int i){ mt19937 mt; random_device rnd; mt.seed(rnd()); uniform_int_distribution<> rand1(0, i); return rand1(mt); } string next_key(string key){ string n_key; for(int i = 0; i < 64; i++){ n_key.push_back(key[dice(127)]); } return n_key; } string next_nonce(string key){ string n_nonce; for(int i = 0; i < 16; i++){ n_nonce.push_back(key[dice(127)]); } return n_nonce; } [/cpp]72~95行目の部分です。
やってることは簡単です。0~128の乱数を生成して、key streamからその番目の文字を次のkeyやnonceにpush backします。
しかし、この方法だとあまりに実行速度がおそすぎます。サンプルサイズを計算して、大体9億個のkey streamを作成する予定なので、もっと高速化します。
そもそも、key streamは疑似乱数機によって偏りなく出るはずなので、key streamを二分割して前か後ろを次のkeyに使うぐらいでいいと思っています。
nonceは文字数が少ないので、このまま乱数使って生成させます。
コード書いてて、私はコードが書きたいだけで、暗号をやりたいわけじゃないんだなあって思っています。今更なのでがんばります。