php - desencriptar - Encriptar y descifrar md5
encriptar y desencriptar en mysql (5)
Como ya se dijo, no se puede descifrar MD5 sin intentar algo como hackeo de fuerza bruta que es extremadamente intensivo en recursos, no práctico y poco ético.
Sin embargo, podría usar algo como esto para encriptar / descifrar contraseñas / etc. de forma segura:
$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 );
}
Usar un método encypted con una sal sería aún más seguro, pero esto sería un buen paso después de usar un hash MD5.
Estoy usando code $enrypt=md5($pass)
e inserto $encrypt
en la base de datos. Quiero encontrar una forma de descifrarlos. Intenté usar un software de descifrado, pero dice que el hash debe tener exactamente 16 bytes. ¿Hay alguna forma de descifrarlo o convertirlo en un hash md5 de 16 bytes?
Mi hash se ve así: c4ca4238a0b923820dcc
Esta pregunta está etiquetada con PHP. Pero muchas personas están usando el marco de Laravel ahora. Podría ayudar a alguien en el futuro. Es por eso que respondo por Laravel. Es más fácil de cifrar y descifrar con funciones internas.
$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);
Nota: asegúrese de establecer una cadena aleatoria de 16, 24 o 32 caracteres en la opción clave del archivo config / app.php. De lo contrario, los valores cifrados no serán seguros.
Pero no deberías usar encriptar y descifrar para la autenticación. En vez de eso, debes usar hash make y check.
Para almacenar la contraseña en la base de datos, haga un hash de contraseña y luego guárdelo.
$password = Input::get(''password_from_user'');
$hashed = Hash::make($password); // save $hashed value
Para verificar la contraseña, obtenga la contraseña almacenada de la cuenta de la base de datos
// $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
}
Los hash no se pueden descifrar verifique esto .
Si desea cifrar-descifrar, utilice una función de cifrado bidireccional de su base de datos como - AES_ENCRYPT (en MySQL).
Pero sugeriré el algoritmo CRYPT_BLOWFISH para almacenar la contraseña. Lea esto: http://php.net/manual/en/function.crypt.php y http://us2.php.net/manual/en/function.password-hash.php
Para la función Blowfish by crypt()
-
crypt(''String'', ''$2a$07$twentytwocharactersalt$'');
password_hash
se introducirá en PHP 5.5.
$options = [
''cost'' => 7,
''salt'' => ''BCryptRequires22Chrcts'',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
Una vez que haya almacenado la contraseña, puede verificar si el usuario ingresó la contraseña correcta al volver a mezclarla y compararla con el valor almacenado.
No hay forma de descifrar MD5. Bueno, hay, pero no hay forma razonable de hacerlo. Ese es el tipo de punto.
Para verificar si alguien está ingresando la contraseña correcta, necesita MD5 independientemente de lo que el usuario ingresó, y vea si coincide con lo que tiene en la base de datos.
/* you can match the exact string with table value*/
if(md5("string to match") == $res["hashstring"])
echo "login correct";