元のリンク: http://www.sitepoint.com/ocr-in-php-read-text-from-images-with-tesseract/
この記事は MaNong.com で最初に公開されました: http: //www .codeceo.com/article/php-ocr-tesseract-get-text.html
翻訳者: Qiu Kang (Weibo: Qiu Kang singasong)
この記事では、暗号化のための乱数の生成に関連する問題を分析します。 PHP 5 には、暗号的に強力な乱数を生成する単純なメカニズムが提供されていませんでしたが、PHP 7 では、いくつかの CSPRNG 関数を導入することでこの問題を解決しました。
Wikipediaを引用すると、暗号学的に安全な擬似乱数生成器(CSPRNG)は、暗号アルゴリズムに適した擬似乱数を生成する擬似乱数生成器(PRNG)です。
CSPRNG は主に次の用途に使用できます:
鍵の生成 (例: 複雑な鍵の生成)
新しいユーザーのランダムなパスワードを生成
CSPRNG の側面
random_bytes 関数は文字列を返し、返された結果のバイト数を表す int 入力パラメータを受け取ります。
例:
$bytes = random_bytes('10');var_dump(bin2hex($bytes));//possible ouput: string(20) "7dfab0af960d359388e6"
random_int 関数は、指定された範囲内の int 数値を返します。
例:
var_dump(random_int(1, 100));//possible output: 27
バックグラウンド実行環境
簡単なテストはサイコロゲームです。 1 つのサイコロを 1 回振って 6 の目が出る確率が 1/6 であると仮定すると、3 つのサイコロを同時に 100 回振ると、結果はおおよそ次のようになります:
$times = 1000000;$result = [];for ($i=0; $i<$times; $i++){ $dieRoll = array(6 => 0); //initializes just the six counting to zero $dieRoll[roll()] += 1; //first die $dieRoll[roll()] += 1; //second die $dieRoll[roll()] += 1; //third die $result[$dieRoll[6]] += 1; //counts the sixes}function roll(){ return random_int(1,6);}var_dump($result);
PHP7 の使用 Random_intそして単純です rand 関数は次の結果を取得する可能性があります
Sixes expected random_int0 579000 5794301 347000 3469272 69000 689853 5000 4658
より適切に比較するために、最初に rand と random_int を確認すると、数式を適用して結果をグラフに描画できます。式は次のとおりです: (php 結果 - 期待される結果)/期待される結果の 0.5 乗。
結果のグラフは次のとおりです:
(接近0的值更好)
3 6 の結果は良くなく、このテストは実際のアプリケーションには単純すぎますが、それでも、random_int のパフォーマンスが rand より優れていることがわかります。
さらに、アプリケーションのセキュリティレベルは、乱数発生器の予測不可能性と再現性のある動作によって増加します。
PHP5 についてはどうですか?
より優れた乱数ジェネレーターの使用を開始し、同時に PHP7 を使用する準備ができている場合は、Paragon Initiative Enterprises のrandom_compat ライブラリを使用できます。 random_compat ライブラリを使用すると、PHP 5 でrandom_bytes() とrandom_int() を使用できるようになります。 ()
openssl_random_pseudo_bytes ()
$passwordChar = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';$passwordLength = 8;$max = strlen($passwordChar) - 1;$password = '';for ($i = 0; $i < $passwordLength; ++$i) { $password .= $passwordChar[random_int(0, $max)];}echo $password;//possible output: 7rgG8GHu
你总是应该使用一个密码学上安全的伪随机数生成器, random_compat库提供了一种好的实现。
如果你想要使用可靠的随机数据源,如你在本文所见,建议尽快使用 random_int和 random_bytes.