encryption和解密md5

我正在使用代码$enrypt=md5($pass)并将$encrypt插入数据库。 我想找出一种方法来解密他们。 我试过使用解密软件,但它说,哈希应该是正好16个字节。 有什么办法来解密或使其16字节的MD5散列?

我的哈希看起来像这样: c4ca4238a0b923820dcc

正如已经说过的,你不能解密MD5而不尝试像蛮力攻击那样的资源密集型,不实用和不道德的东西。

但是,你可以使用这样的东西来安全地encryption/解密密码/ 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 ); } 

使用加盐的encryption方法会更安全,但是这只是使用MD5哈希的一个好的下一步。

没有办法解密MD5。 那么有,但没有合理的方法去做。 这是一个重点。

要检查是否有人input正确的密码,无论用户input什么内容,都需要MD5,并查看它是否与数据库中的内容相符。

 /* you can match the exact string with table value*/ if(md5("string to match") == $res["hashstring"]) echo "login correct"; 

哈希无法解密检查了这一点 。

如果要encryption解密,请使用数据库的双向encryption函数,如AES_ENCRYPT(在MySQL中)。

但是我会build议CRYPT_BLOWFISHalgorithm来存储密码。 阅读 – 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将引入password_hash

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

一旦你存储了密码,你就可以再次检查用户是否input了正确的密码,并将其与存储的值进行比较。

这个问题用PHP标记。 但是现在很多人都在使用Laravel框架。 它可能在未来帮助某人。 这就是为什么我回答Laravel。 用内部函数encryption和解密更容易。

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

注意:一定要在config / app.php文件的key选项中设置一个16,24或32个字符的随机string。 否则,encryption值将不安全。

但是您不应该使用encryption和解密进行身份validation。 相反,你应该使用哈希make和检查。

要将密码存储在数据库中,请对密码进行散列,然后保存。

 $password = Input::get('password_from_user'); $hashed = Hash::make($password); // save $hashed value 

要validation密码,请从数据库获取帐户存储的密码

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