mcryptにとって最も安全な鍵は何ですか?mcrypt 128ビット鍵のための最も安全な鍵?
128ビットキーを使用するとはどういう意味ですか?それは何文字ですか?
私のキーは、数字と文字で32文字です。
私は自分のサイトに署名したユーザーの個人データを暗号化/復号化するためにmcryptを使用しています。
mcryptにとって最も安全な鍵は何ですか?mcrypt 128ビット鍵のための最も安全な鍵?
128ビットキーを使用するとはどういう意味ですか?それは何文字ですか?
私のキーは、数字と文字で32文字です。
私は自分のサイトに署名したユーザーの個人データを暗号化/復号化するためにmcryptを使用しています。
最も安全なキーのようなものはありません。それは "パスワード"のようなものです。 キーを使用すると、エンコードアルゴリズムが対称である場合にデータをエンコード/デコードできます。
128ビットのキーは、16バイトの128ビットで構成された単なるキーです。 ASCIIでは、1バイト= 1文字。ほとんどのキーはランダムなバイナリデータです。これはbase64でエンコードされ、24文字の文字列表現になります。
さらに、mcryptは、同じインターフェイスを使用して複数のエンコードアルゴリズムを使用できるようにするPHP拡張モジュールです。キーのサイズは、アルゴリズムによって異なります。 選択したアルゴリズムのキーのサイズについては、mcrypt_module_get_algo_key_sizeを参照してください。
最も安全なキーはランダムなデータ(バイナリはかなり良い)の束です。はい、128ビットキーは32文字を使用します。ナンス機能が強力なキーを作成するには十分なはずである(そして、あなたが被害妄想している場合、それをハッシュすることを助けることができる):
function nonce($l = 32, $raw = true){
$ret = '';
for($x = 0; $x < $l; $x++) $ret .= chr(mt_rand(0,255));
return ($raw ? $ret : base64_encode($ret));
}
かなり強力なハッシュ関数は(このハッシュ関数は、PBKDF2ハッシュである)このようになります:
function hash($p, $s, $c = 5000, $kl = null, $a = 'SHA256'){
$hl = strlen(hash($a, null, true));
if(is_null($kl)) $kl = $hl;
$kb = ceil($kl/$hl);
$dk = '';
for($block = 1; $block <= $kb; $block++){
$ib = $b = hash_hmac($a, $s.pack('N', $block), $p, true);
for($i = 0; $i < $c; $i++)
$ib ^= ($b = hash_hmac($a, $b, $p, true));
$dk .= $ib;
}
return substr($dk, 0, $kl);
}
そして、あなたはこのようにそれを使用します。
$key = hash(nonce(), nonce(), 5000, 32);