шифровать и расшифровывать md5

Я использую код $enrypt=md5($pass) и вставляю $encrypt в базу данных. Я хочу узнать, как их расшифровать. Я попытался использовать дешифрующее программное обеспечение, но он говорит, что хэш должен быть ровно 16 байт. есть ли способ расшифровать его или сделать его 16-байтовым md5-хешем?

Мой хэш выглядит так: c4ca4238a0b923820dcc

Как уже было сказано, вы не можете расшифровывать MD5, не пытаясь что-то вроде взлома грубой силы, которая чрезвычайно ресурсоемкая, непрактичная и неэтичная.

Однако вы можете использовать что-то вроде этого, чтобы безопасно шифровать / расшифровывать пароли / etc:

 $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 ); } 

Использование encypted метода с солью было бы еще более безопасным, но это было бы хорошим следующим шагом после использования 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.

Для функции Blowfish функцией crypt()

 crypt('String', '$2a$07$twentytwocharactersalt$'); 

password_hash будет введен в PHP 5.5.

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

После того, как вы сохранили пароль, вы можете проверить, введен ли пользователь правильный пароль, снова связав его и сравнив его с сохраненным значением.

Этот вопрос помечен 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); 

Примечание. Обязательно установите случайную строку 16, 24 или 32 символа в ключевой опции файла config / app.php. В противном случае зашифрованные значения не будут защищены.

Но вы не должны использовать шифрование и расшифровку для аутентификации. Скорее вы должны использовать хеш-марку и проверку.

Чтобы сохранить пароль в базе данных, введите хэш пароля и затем сохраните.

 $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 }