[解決済み】PHPでパスワードを暗号化・復号化する最適な方法とは?[重複している]。
2022-04-08 12:59:12
質問
重複の可能性があります。
PHPの2ウェイ暗号化。検索可能なパスワードを保存する必要がある
私のウェブサイトでは、rapidshareのユーザー名やパスワードなど、ユーザーの海外アカウント情報を保存する予定です。私は情報を安全に保ちたいのですが、彼らの情報をハッシュ化すると、後で使用するためにそれを取得することができないことを知っています。
Base64は復号化できるので、そのまま使っても意味がない。 私のアイデアは、ユーザーとパスをbase64化する前と後にスクランブルすることで、復号化した後でも、復号化しようとするとおかしなテキストが表示されます。文字列のユニークなスクランブルを作成し、後で値が再計算されたときにそれをデスクランブルする値を受け入れるPHP関数はありますか?
何か提案はありますか?
解決方法は?
パスワードは暗号化せず、bcryptなどのアルゴリズムでハッシュ化する必要があります。 この回答は、PHPでパスワードハッシュを適切に実装する方法について説明しています。 . それでも、暗号化/復号化する方法は以下の通りです。
$key = 'password to (en/de)crypt';
$string = ' string to be encrypted '; // note the spaces
暗号化すること。
$iv = mcrypt_create_iv(
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
MCRYPT_DEV_URANDOM
);
$encrypted = base64_encode(
$iv .
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
$string,
MCRYPT_MODE_CBC,
$iv
)
);
復号化すること。
$data = base64_decode($encrypted);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$decrypted = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
MCRYPT_MODE_CBC,
$iv
),
"\0"
);
注意事項 : 上記の例では、情報を暗号化していますが、改ざんを防ぐための暗号文の認証は行っていません。 あなたは ない セキュリティのために認証されていない暗号化に依存すること 特に、提供されたコードはパディングオラクル攻撃に対して脆弱であるためです。
こちらもご覧ください。
- https://stackoverflow.com/a/30189841/2224584
- https://stackoverflow.com/a/30166085/2224584
- https://stackoverflow.com/a/30159120/2224584
また、暗号化キーに "パスワード" を使用するだけではありません。 暗号化キーはランダムな文字列です。
echo 'Encrypted:' . "\n";
var_dump($encrypted); // "m1DSXVlAKJnLm7k3WrVd51omGL/05JJrPluBonO9W+9ohkNuw8rWdJW6NeLNc688="
echo "\n";
echo 'Decrypted:' . "\n";
var_dump($decrypted); // " string to be encrypted "
関連
-
[解決済み】PHPで空の値からデフォルトオブジェクトを作成する?
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】MySQLのカラム数が1行目の値数と一致しない【非公開
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] PHPのstartWith()関数とendsWith()関数
-
[解決済み] PHPでパスワードをハッシュ化するためにbcryptを使用するにはどうすればよいですか?
-
[解決済み】PHPパスワードのハッシュとソルトの安全性について
-
[解決済み】PHPの文字列を暗号化・復号化する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 整形されていない数値が発生しました。
-
[解決済み] SAJAXは死んだか?何を置き換えるべきか?
-
[解決済み】foreach()に与えられた引数が無効です。)
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】「Fatal error: Class 'MySQLi' not found "を解決するには?
-
[解決済み] 警告:mysqli_fetch_array()は、パラメータ1がmysqli_resultであることを期待する、オブジェクトはで指定された。
-
[解決済み] PHPでパスワードをハッシュ化するためにbcryptを使用するにはどうすればよいですか?
-
[解決済み】PHPの文字列を暗号化・復号化する方法とは?
-
[解決済み】PHPを使った最も簡単な双方向暗号化方法
-
[解決済み] 双方向の暗号化 検索可能なパスワードを保存したい