我正在使用代码$enrypt=md5($pass)
并将$encrypt
插入数据库。我想找到解密它们的方法。我尝试使用解密软件,但它说散列应该是16字节。有没有办法解密它或使其成为一个16字节的md5哈希?
我的哈希看起来像这样:c4ca4238a0b923820dcc
答案 0 :(得分:64)
如前所述,如果不尝试使用非常耗费资源,不实用且不道德的强力黑客攻击,则无法解密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 );
}
使用带盐的encypted方法会更安全,但这只是使用MD5哈希的一个很好的下一步。
答案 1 :(得分:16)
无法解密MD5。嗯,有,但没有合理的方式来做到这一点。这就是重点。
要检查是否有人输入了正确的密码,您需要MD5无论用户输入什么,并查看它是否与您在数据库中的内容相匹配。
答案 2 :(得分:5)
/* you can match the exact string with table value*/
if(md5("string to match") == $res["hashstring"])
echo "login correct";
答案 3 :(得分:4)
这个问题用PHP标记。但现在很多人都在使用Laravel框架。它可能在将来帮助某人。这就是我为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文件的关键选项。否则,加密值 不会安全。
但是你不应该使用加密和解密进行身份验证。相反,你应该使用hash 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 :(得分:2)
无法解密哈希check this out。
如果要加密 - 解密,请使用数据库的双向加密功能,例如 - AES_ENCRYPT(在MySQL中)。
但我会建议使用CRYPT_BLOWFISH算法来存储密码。阅读此内容 - http://php.net/manual/en/function.crypt.php和http://us2.php.net/manual/en/function.password-hash.php
通过 存储密码后,您可以再次对其进行散列并将其与存储的值进行比较,以检查用户是否输入了正确的密码。crypt()
函数对crypt('String', '$2a$07$twentytwocharactersalt$');
password_hash
将在PHP 5.5中引入。$options = [
'cost' => 7,
'salt' => 'BCryptRequires22Chrcts',
];
password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options);
答案 5 :(得分:2)
无法解密创建的 grails.core.ApplicationContext
哈希。您需要所有信息来解密在加密过程中使用的 MD5
值。
您可以使用 MD5
算法进行加密和解密
JavaScript AES encryption and decryption (Advanced Encryption Standard)