Шифровать и расшифровывать md5
Я использую код $enrypt=md5($pass)
и вставляю $encrypt
в базу данных. Я хочу узнать, как их расшифровать. Я попытался использовать дешифрующее программное обеспечение, но он говорит, что хэш должен быть ровно 16 байт. есть ли способ расшифровать его или сделать его 16-байтовым md5-хешем?
Мой хэш выглядит так: c4ca4238a0b923820dcc
Ответы
Ответ 1
Как уже говорилось, вы не можете расшифровать 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 хэша.
Ответ 2
Невозможно расшифровать MD5. Ну, есть, но нет разумного способа это сделать. Такого рода точка.
Чтобы проверить, вводит ли кто-либо правильный пароль, вам необходимо указать MD5 независимо от введенного пользователем и посмотреть, соответствует ли он тому, что у вас есть в базе данных.
Ответ 3
/* you can match the exact string with table value*/
if(md5("string to match") == $res["hashstring"])
echo "login correct";
Ответ 4
Этот вопрос помечен 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
}
Ответ 5
Хэши нельзя расшифровать проверить это.
Если вы хотите шифровать-расшифровать, используйте двухстороннюю функцию шифрования вашей базы данных, например 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);
После того, как вы сохранили пароль, вы можете проверить, введен ли пользователь правильный пароль, снова связав его и сравнив его с сохраненным значением.
Ответ 6
Невозможно расшифровать созданный хэш MD5
. Для расшифровки значения MD5
которое использовалось во время шифрования, вам нужна вся информация.
Вы можете использовать алгоритм AES
для шифрования и дешифрования
JavaScript AES-шифрование и дешифрование (Advanced Encryption Standard)