私はコード$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";
この質問はPHPでタグ付けされています。しかし、現在多くの人々がLaravelフレームワークを使用しています。将来誰かに役立つかもしれません。だからこそ、私はララベルに答えた。内部関数を使って暗号化および復号化する方が簡単です。
$string = 'c4ca4238a0b923820dcc';
$encrypted = \Illuminate\Support\Facades\Crypt::encrypt($string);
$decrypted_string = \Illuminate\Support\Facades\Crypt::decrypt($encrypted);
var_dump($string);
var_dump($encrypted);
var_dump($decrypted_string);
注意:config/app.phpファイルのkeyオプションには、必ず16、24、または32文字のランダムな文字列を設定してください。それ以外の場合、暗号化された値は安全ではありません。
しかし、認証には暗号化と復号化を使用しないでください。代わりに、ハッシュmakeとcheckを使うべきです。
$password = Input::get('password_from_user');
$hashed = Hash::make($password); // save $hashed value
// $user is database object
// $inputs is Input from user
if( \Illuminate\Support\Facades\Hash::check( $inputs['password'], $user['password']) == false) {
// Password is not matching
} else {
// Password is matching
}
作成したハッシュMD5
を復号化することはできません。暗号化中に使用されたMD5
値を復号化するには、すべての情報が必要です。
暗号化と復号化にはAES
アルゴリズムを使用できます。
ハッシュは復号化できません これをチェックしてください 。
暗号化 - 復号化したい場合は、 - MySQLのAES_ENCRYPTのようにデータベースの双方向暗号化機能を使用してください。
しかし、パスワードを保存するためのCRYPT_BLOWFISHアルゴリズムを提案します。これを読みなさい--- http://php.net/manual/en/function.crypt.php そして http://us2.php.net/manual/en/function.password- hash.php
crypt()
関数によるBlowfishの場合 -
crypt('String', '$2a$07$twentytwocharactersalt$');
password_hash
はPHP 5.5で導入される予定です。
$options = [
'cost' => 7,
'salt' => 'BCryptRequires22Chrcts',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
パスワードを保存したら、それを再度ハッシュして保存されている値と比較することで、ユーザーが正しいパスワードを入力したかどうかを確認できます。