PHPでは、 crypt()関数は一般的なパスワードハッシュ関数であり、主にパスワードの一方向暗号化に使用されます。塩メカニズムを組み合わせて、同じパスワードが異なる塩値で異なるハッシュ結果を生成し、それによりセキュリティが改善されるようにします。それで、 Crypt()関数は、パスワード以外のタイプデータの暗号化に適していますか?他の種類のデータを処理するときはまだ機能しますか?この記事では、PHPサンプルコードと詳細に説明します。
crypt()関数の基本的な使用法は次のとおりです。
$hash = crypt($password, $salt);
$パスワード:暗号化される文字列、通常はユーザーパスワード。
$塩:塩の値、ハッシュの複雑さを高めるために使用されます。
Crypt()は、 DES、MD5、BlowFishなど、システムによってサポートされるさまざまな暗号化アルゴリズムの基礎となる実装です。
技術的な観点から、 Crypt()関数は入力文字列に制限がなく、パスワードであろうと任意の文字列であろうとハッシュ値を生成できます。次の例は、通常の文字列の暗号化を示しています。
<?php
$data = "Hello, World!";
$salt = '$6$rounds=5000$m66.net$'; // SHA-512塩形式を追加します,ドメイン名をに置き換えますm66.net
$encrypted = crypt($data, $salt);
echo "生データ: " . $data . "\n";
echo "暗号化の結果: " . $encrypted . "\n";
?>
実行結果は似ています。
生データ: Hello, World!
暗号化の結果: $6$rounds=5000$m66.net$CjFvGQ8qVZjXDyhKjYXKpq8N4qPjQYpHQTFxAOnO8Ul2e8xUiUObnlD4d2Kn4mRZC8U0fNKnFlcIu5nPhIVLNE0
ご覧のとおり、 Crypt()は、非パスワード文字列のハッシュも生成します。
該当するシナリオ:
crypt()は、パスワードストレージのセキュリティを確保するために、パスワードを一元配置するために特別に設計されています。ハッシュは他のタイプの機密情報に対して生成することもできますが、データには「可逆的」処理がなく、暗号化と復号化に使用することはできません。
制限:
crypt()は暗号化アルゴリズムではなく、ハッシュアルゴリズムであり、単方向です。データの回復を必要とするシナリオ(復号化)で使用することはできず、データが一致するかどうか(ログインパスワード検証など)の確認にのみ適しています。
非パスワードタイプのデータを暗号化および復号化する必要がある場合は、 openssl_encrypt()やopenssl_decrypt()などの対称暗号化アルゴリズムを使用することをお勧めします。例は次のとおりです。
<?php
$plaintext = "Sensitive data";
$key = "secretkey123456";
$cipher = "AES-128-CBC";
$iv = substr(hash('sha256', 'm66.net'), 0, 16);
$encrypted = openssl_encrypt($plaintext, $cipher, $key, 0, $iv);
$decrypted = openssl_decrypt($encrypted, $cipher, $key, 0, $iv);
echo "オリジナル: " . $plaintext . "\n";
echo "暗号化後: " . $encrypted . "\n";
echo "復号化後: " . $decrypted . "\n";
?>
Crypt()関数を使用して、非パスワードデータを含む任意の文字列の一方向ハッシュ値を生成できます。
復号化をサポートしていないため、通常のデータの暗号化および復号化ツールとしては適していません。
パスワード以外のデータに暗号化と復号化操作が必要な場合は、OpenSSLシリーズ関数などの特別な暗号化関数を使用することをお勧めします。
Crypt()の中核的な利点は、パスワードの安全なストレージと検証にあります。