web-dev-qa-db-ja.com

md5の暗号化と復号化

私はコード$enrypt=md5($pass)を使い、データベースに$encryptを挿入しています。それらを復号化する方法を見つけたいのです。私は復号化ソフトウェアを使用してみましたが、ハッシュはちょうど16バイトであるべきだと言っています。それを復号化するか、それを16バイトのMD5ハッシュにする方法はありますか?

私のハッシュはこんな感じです:c4ca4238a0b923820dcc

57
Tomer

すでに述べたように、ブルートフォースハッキングのような、リソースを大量に消費する、実用的ではなく、非倫理的なことを試みない限り、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ハッシュを使用することを過ぎた過去の良い次のステップです。

64
BIT CHEETAH

MD5を復号化する方法はありません。まあ、ありません、しかし妥当なそれをする方法はありません。それがポイントのようなものです。

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

16
/* you  can match the exact string with table value*/

if(md5("string to match") == $res["hashstring"])
 echo "login correct";
5
Mahesan Rv

この質問は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 
}
4
Somnath Muluk

作成したハッシュMD5を復号化することはできません。暗号化中に使用されたMD5値を復号化するには、すべての情報が必要です。

暗号化と復号化にはAESアルゴリズムを使用できます。

JavaScript AES暗号化および復号化(Advanced Encryption Standard)

2
Mayur S

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

暗号化 - 復号化したい場合は、 - 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);

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

2
ShuklaSannidhya