お世話になります。私の拙い文章に目を通していただければ幸いに存じます。
以下のようなプログラムを走らせると、同じシードを設定した場合、シードを設定してからの呼び出し回数に応じて、rand関数は同じ値を返すようであることがわかります。この挙動を利用すれば、暗号化(例えば暗号化したいデータに対して1バイトずつrandの結果を加算していき、復号化の時は暗号化の時と同じシードを設定して、1バイトずつrandの結果を除算していくなど)なんかも実現できそうです。しかし、そこで疑問に思ったのですが、この同じシードが設定されれば同じ値を返すという挙動は仕様書なんかで保証されているのでしょうか?保証されてないのに、「どうやらそういう挙動らしい」で暗号化なんかを実装するのはやはり危険でしょうか?
C
1#include <stdio.h> 2#include <stdlib.h> 3 4void showRand() 5{ 6 srand(0u); 7 for (int i = 0; i < 10; ++i) { 8 printf("%d ", rand()); 9 } 10 printf("\n"); 11} 12 13int main() 14{ 15 showRand(); 16 showRand(); 17 showRand(); 18 system("pause"); 19}
実行結果
38 7719 21238 2437 8855 11797 8365 32285 10450 30612
38 7719 21238 2437 8855 11797 8365 32285 10450 30612
38 7719 21238 2437 8855 11797 8365 32285 10450 30612
続行するには何かキーを押してください . . .
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/07 14:44 編集
2016/05/07 15:38