ソースコード
暗号化はパスワードに使うのですが、(本当はハッシュでやるべきですが)パスワードを復号化して再度利用したいのでopensslを利用しています。そして、復号化をするときになぜか復号化されないので質問します。
signup.php
php
1~~~~略~~~~ 2$key1='******'; 3$method = 'AES-128-CBC'; 4$ivLength = openssl_cipher_iv_length($method); 5$iv = openssl_random_pseudo_bytes($ivLength); 6$encString = openssl_encrypt($password,$method,$key1,0,$iv); 7$iv=base64_encode($iv); 8~~~~略~~~~ 9$stmt->bindParam(':iv', $iv, PDO::PARAM_STR); 10~~~~略~~~~
login.php
php
1~~~~略~~~~ 2$ivs=array(); 3~~~~略~~~~ 4$ivs[]=$row["iv"]; 5~~~~略~~~~ 6for(省略){ 7~~~~略~~~~ 8$key1='******'; 9$method='AES-128-CBC'; 10$iv=base64_decode($ivs[$i]); 11$dS=openssl_decrypt($passs[$i], $method, $key1,0,$ivs[$i]); 12if($dS===$pass){ 13echo "login"; 14} 15~~~~略~~~~
現在、このコードだと正しいはずのパスワードを入力しても認証されません。どうしたらいいでしょうか。
必要な部分のみ記述しましたが、追加の情報が欲しけれぜひ言ってください。
検索してもなかなか出てこないので
情報
mysqlのivの照合順序はutf8_general_ciでデータ型はtextです。
phpバージョンはPHP7.3.8です。
phpmyadminからivを見ると少し文字化けしているように感じますがもともとでしょうか。
↓↓↓↓
保存時にbase64に変更して解決しました。
追記
login.phpの確認時に逆に入力された文字を暗号して確認する方法もやったのですが暗号化後のテキストが違うものになってしまいました。
php
1~~~~略~~~~ 2$ivs=array(); 3~~~~略~~~~ 4$ivs[]=$row["iv"]; 5~~~~略~~~~ 6for(省略){ 7~~~~略~~~~ 8$key1='******'; 9$method='AES-128-CBC'; 10$iv=base64_decode($ivs[$i]); 11$pass=openssl_encrypt($pass,$method,$key1,0,$iv); 12// $dS=openssl_decrypt($passs[$i], $method, $key1,0,$iv); 13if($passs[$i]===$pass){ 14echo "login"; 15} 16~~~~略~~~~
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/07 06:43
2019/11/07 06:44
2019/11/07 07:03
2019/11/07 10:10
2019/11/07 10:18
2019/11/07 12:49
2019/11/08 00:14
2019/11/08 14:41
2019/11/08 14:47
2019/11/08 22:32
2019/11/08 22:33
2019/11/08 23:18
2019/11/08 23:26