文字列があり、この文字列をデータベースに安全に保存したい。php7を使用してsaltで暗号化/復号化する文字列
私の心には、ユーザーのパスワードを暗号化キーとして使用してこの文字列を暗号化することが考えられます。
ユーザーがこの文字列を使用する必要がある場合、そのキーを使用してこの文字列を復号化します。
これらの文字列をデータベースに安全に格納するのに役立つアルゴリズムがあり、誰でもチームにアクセスすることはできません。
文字列があり、この文字列をデータベースに安全に保存したい。php7を使用してsaltで暗号化/復号化する文字列
私の心には、ユーザーのパスワードを暗号化キーとして使用してこの文字列を暗号化することが考えられます。
ユーザーがこの文字列を使用する必要がある場合、そのキーを使用してこの文字列を復号化します。
これらの文字列をデータベースに安全に格納するのに役立つアルゴリズムがあり、誰でもチームにアクセスすることはできません。
AESのような共有秘密暗号化アルゴリズムを使用したいとします。 opensslとmcryptの両方がこれをサポートするはずです。私はmcryptがEOLであるのでopensslをお勧めします。
次の例は、php.netから直接提供されています。元のデータを取得したい場合は、おそらくhmacは必要ありません。
<?php
//$key previously generated safely, ie: openssl_random_pseudo_bytes
$plaintext = "message to be encrypted";
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);
$ciphertext_raw = openssl_encrypt($plaintext, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
//$hmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
$ciphertext = base64_encode($iv./*$hmac.*/$ciphertext_raw);
//decrypt later....
$c = base64_decode($ciphertext);
$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = substr($c, 0, $ivlen);
//$hmac = substr($c, $ivlen, $sha2len=32);
$ciphertext_raw = substr($c, $ivlen/*+$sha2len*/);
$original_plaintext = openssl_decrypt($ciphertext_raw, $cipher, $key, $options=OPENSSL_RAW_DATA, $iv);
/*
$calcmac = hash_hmac('sha256', $ciphertext_raw, $key, $as_binary=true);
if (hash_equals($hmac, $calcmac))//PHP 5.6+ timing attack safe comparison
{
echo $original_plaintext."\n";
}
*/
私はすでにこれらを使用していますが、機密データの安全性を知りたいと思っていました。 – Adam
暗号化アルゴリズムと同じくらい安全です。そのアルゴリズムが十分であるかどうかは、要件によって異なります。キー長/ブロックサイズなどの推奨事項については、NISTに問い合わせてください。データを復号化できる唯一のユーザーであり、ユーザーのパスワードが@summerSuの提案を使用してハッシュされている限り、ブルートフォースクラッキングの考慮点を除いて十分に安全でなければなりません。 –
md5ユーザーパスワードのようにキーとして直接使用する前に、ユーザーパスワード(暗号化キーとして使用している)を暗号化した場合、ユーザーパスワードが弱い場合は任意の種類のブルートフォースを避けてください。 – Adam
[関連]の下の画面の右側を見てください。 –
php7の多くの機能は廃止されて以来、5-8年前からほとんどすべての質問があります。 – Adam
ハッシュを一致させるときにレインボーテーブルを使用しないように、ハッシュされた項目に既知の値を追加するために塩が使用されます。おそらく、ユーザーパスワードを暗号化キーとして使用することを意味します。 –