在使用mysql數(shù)據(jù)庫(kù)的時(shí)候,經(jīng)常會(huì)遇到需要使用密碼的情況,但如果密碼忘記了或者需要從別的地方復(fù)用之前的密碼,就需要使用密碼解密工具進(jìn)行解密。
下面介紹一種常用的mysql數(shù)據(jù)庫(kù)密碼解密工具,可使用php代碼實(shí)現(xiàn),也可在命令行中使用。
/** * mysql password decrypt tool * * @see http://dev.mysql.com/doc/internals/en/secure-password-authentication.html **/ class MysqlPasswordDecryptor { const SCRAMBLE_LENGTH = 20; const PLUGIN_NAME = 'mysql_native_password'; // mysql password encryption public static function encrypt($password, $publicKey) { $scramble = substr($publicKey, 0, self::SCRAMBLE_LENGTH) ^ str_repeat(md5($password . self::PLUGIN_NAME), self::SCRAMBLE_LENGTH); return '*' . strtoupper(sha1(sha1($scramble) . pack('H*', sha1($publicKey)))); } // mysql password decryption public static function decrypt($password) { if (strlen($password)<= 1) { return false; } if ($password[0] == '*') { $password = substr($password, 1); if (strlen($password) != 40) { return false; } return $password; } return false; } }
以上代碼中,encrypt函數(shù)是mysql密碼加密函數(shù),接收兩個(gè)參數(shù),分別為密碼和公鑰,返回加密后的密碼字符串;
decrypt函數(shù)則是mysql密碼解密函數(shù),接收一個(gè)參數(shù),即需要解密的密碼,返回解密后的密碼字符串。
當(dāng)解密函數(shù)返回false時(shí),說(shuō)明無(wú)法解密該密碼。