こんにちは私は現在、私が作成しているJavaアプリケーションを私が持っているWebサイトにリンクしようとしています。基本的には、サイトで作成したアカウントを Java アプリでアクセスできるようにしたいと考えています。私のログイン ページには、SQL データベースに保存されているパスワードの一部を抽出するコード ブロックがあります。ここにあります:
$username = $_POST['username']; //gets the username that is posted from the login page
$password = hash(sha256, md5(sha1($_POST['password']))); //encrypts the password posted from the login page
//get the requested user's password
$details = $database->processQuery("SELECT `password` FROM `users` WHERE `username` = ?", array($username), true); //gets the password from the sql database
$db_password = substr(substr($details[0]['password'], 54), 0, -3); //extracts characters from the saved password from 54 to -3 from the end
登録ページには次のものがあります。
//generate a salt
$salt = substr(hash(sha256, sha1(time())), 10);
$password = $salt.hash(sha256, md5(sha1($_POST['password']))).substr($salt, 0, -51);
$_SESSION['salt'] = $salt;
$_SESSION['password'] = $password;
$base->redirect('done.php');
これにより、その時点で生成されるパスワードの前にソルトが追加されると思います。したがって、パスワードだけを抽出する必要があり、明らかにログインページで、パスワードを54で開始し、最後の3文字前で終了することでこれを行うことができます。ユーザーが Java アプリケーション (sha1 > md5 > sha254) に入力するパスワードを暗号化するクリプトグラファーを作成し、パスワードを一致させようとしました。私が使用した:
substring(54, pass.length()-3)
これは、ウェブサイト「d1ck30ng1」で入力したランダムに生成されたパスワードで完全に機能しました。しかし、パスワード「test123」で別のアカウントを作成すると、一致するパスワードの前に余分な文字が表示されます。例を次に示します。
d1ck30ng1:
Password that is read from the database before parts are removed:
5a3a59efb7d2085d12a2fe5298a7795c85b99dc7b3bcabc60d9e4c6469fe4370d1bd7f2b4ff0151698e3911a97f326f1fc1409a8d5430e7d283cbf5a3
Password that is entered in the application:
6469fe4370d1bd7f2b4ff0151698e3911a97f326f1fc1409a8d5430e7d283cbf
Password that is read from the database after the parts are removed:
6469fe4370d1bd7f2b4ff0151698e3911a97f326f1fc1409a8d5430e7d283cbf
matches perfectly
test123:
Password that is read from the database before parts are removed:
fb1c94c4ab1b104badff98261269856aca8d34575c7114124aebbd068dc28e9d998bee17cdb25f5b1501710d4a629ad37f762478eeb01f465bc24bfb1
Password that is entered in the application:
68dc28e9d998bee17cdb25f5b1501710d4a629ad37f762478eeb01f465bc24b
Password that is read from the database after parts are removed
068dc28e9d998bee17cdb25f5b1501710d4a629ad37f762478eeb01f465bc24b
does not match!
だから私の質問は...どうすればこれを機能させることができ、なぜ機能しないのですか:) よろしくお願いします! あ、ちなみに、私はここに来たばかりなので、この投稿に十分な詳細を記載していなかったり、投稿中に何か間違ったことをしたりした場合は申し訳ありません.