70

コード$enrypt=md5($pass)を使用してデータベースに挿入$encryptしています。それらを解読する方法を見つけたいです。復号化ソフトウェアを使用してみましたが、ハッシュは正確に 16 バイトである必要があります。それを解読する方法、または 16 バイトの md5 ハッシュにする方法はありますか?

私のハッシュは次のようになります。c4ca4238a0b923820dcc

4

6 に答える 6

73

すでに述べたように、非常にリソースを大量に消費し、実用的ではなく、非倫理的なブルートフォースハッキングのようなことを試みずに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ハッシュを使用するだけの次のステップとしては適切です。

于 2013-03-04T05:02:22.677 に答える
18

MD5 を復号化する方法はありません。ありますが、合理的な方法はありません。それがポイントです。

誰かが正しいパスワードを入力しているかどうかを確認するには、ユーザーが入力したものを MD5 し、データベースにあるものと一致するかどうかを確認する必要があります。

于 2013-03-04T04:43:04.740 に答える
6
/* you  can match the exact string with table value*/

if(md5("string to match") == $res["hashstring"])
 echo "login correct";
于 2013-10-27T15:19:44.617 に答える
2

ハッシュは解読できませんこれをチェックしてください

暗号化/復号化する場合は、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_hashPHP 5.5 で導入されます。

$options = [
    'cost' => 7,
    'salt' => 'BCryptRequires22Chrcts',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);

パスワードを保存したら、パスワードを再度ハッシュし、保存されている値と比較することで、ユーザーが正しいパスワードを入力したかどうかを確認できます。

于 2013-03-04T04:54:52.063 に答える