コード$enrypt=md5($pass)
を使用してデータベースに挿入$encrypt
しています。それらを解読する方法を見つけたいです。復号化ソフトウェアを使用してみましたが、ハッシュは正確に 16 バイトである必要があります。それを解読する方法、または 16 バイトの md5 ハッシュにする方法はありますか?
私のハッシュは次のようになります。c4ca4238a0b923820dcc
すでに述べたように、非常にリソースを大量に消費し、実用的ではなく、非倫理的なブルートフォースハッキングのようなことを試みずにMD5を復号化することはできません。
ただし、次のようなものを使用して、パスワードなどを安全に暗号化/復号化できます。
$input = "SmackFactory";
$encrypted = encryptIt( $input );
$decrypted = decryptIt( $encrypted );
echo $encrypted . '<br />' . $decrypted;
function encryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
function decryptIt( $q ) {
$cryptKey = 'qJB0rGtIn5UB1xG03efyCp';
$qDecoded = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
return( $qDecoded );
}
ソルトを使用した暗号化されたメソッドを使用する方がさらに安全ですが、これはMD5ハッシュを使用するだけの次のステップとしては適切です。
MD5 を復号化する方法はありません。ありますが、合理的な方法はありません。それがポイントです。
誰かが正しいパスワードを入力しているかどうかを確認するには、ユーザーが入力したものを MD5 し、データベースにあるものと一致するかどうかを確認する必要があります。
/* you can match the exact string with table value*/
if(md5("string to match") == $res["hashstring"])
echo "login correct";
ハッシュは解読できませんこれをチェックしてください。
暗号化/復号化する場合は、AES_ENCRYPT (MySQL の場合) のようなデータベースの双方向暗号化機能を使用します。
ただし、パスワードを保存するための CRYPT_BLOWFISH アルゴリズムをお勧めします。これを読んでください- http://php.net/manual/en/function.crypt.phpおよびhttp://us2.php.net/manual/en/function.password-hash.php
フグのcrypt()
機能別 -
crypt('String', '$2a$07$twentytwocharactersalt$');
password_hash
PHP 5.5 で導入されます。
$options = [
'cost' => 7,
'salt' => 'BCryptRequires22Chrcts',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
パスワードを保存したら、パスワードを再度ハッシュし、保存されている値と比較することで、ユーザーが正しいパスワードを入力したかどうかを確認できます。