Я использую код $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 }