好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Navicat 解析已有 Mysql 密码

class NavicatPassword { protected $version = 0 ; protected $aesKey = ‘libcckeylibcckey‘ ; protected $aesIv = ‘libcciv libcciv ‘ ; protected $blowString = ‘3DC5CA39‘ ; protected $blowKey = null ; protected $blowIv = null ; public function __construct( $version = 12 ) { $this ->version = $version ; $this ->blowKey = sha1 (‘3DC5CA39‘, true ); $this ->blowIv = hex2bin(‘d9c7c3c8870d64bd‘ ); } public function encrypt( $string ) { $result = FALSE ; switch ( $this -> version) { case 11: $result = $this ->encryptEleven( $string ); break ; case 12: $result = $this ->encryptTwelve( $string ); break ; default : break ; } return $result ; } protected function encryptEleven( $string ) { $round = intval ( floor ( strlen ( $string ) / 8 )); $leftLength = strlen ( $string ) % 8 ; $result = ‘‘ ; $currentVector = $this -> blowIv; for ( $i = 0; $i < $round ; $i ++ ) { $temp = $this ->encryptBlock( $this ->xorBytes( substr ( $string , 8 * $i , 8), $currentVector )); $currentVector = $this ->xorBytes( $currentVector , $temp ); $result .= $temp ; } if ( $leftLength ) { $currentVector = $this ->encryptBlock( $currentVector ); $result .= $this ->xorBytes( substr ( $string , 8 * $i , $leftLength ), $currentVector ); } return strtoupper ( bin2hex ( $result )); } protected function encryptBlock( $block ) { return openssl_encrypt( $block , ‘BF-ECB‘, $this ->blowKey, OPENSSL_RAW_DATA| OPENSSL_NO_PADDING); } protected function decryptBlock( $block ) { return openssl_decrypt( $block , ‘BF-ECB‘, $this ->blowKey, OPENSSL_RAW_DATA| OPENSSL_NO_PADDING); } protected function xorBytes( $str1 , $str2 ) { $result = ‘‘ ; for ( $i = 0; $i < strlen ( $str1 ); $i ++ ) { $result .= chr ( ord ( $str1 [ $i ]) ^ ord ( $str2 [ $i ])); } return $result ; } protected function encryptTwelve( $string ) { $result = openssl_encrypt( $string , ‘AES-128-CBC‘, $this ->aesKey, OPENSSL_RAW_DATA, $this -> aesIv); return strtoupper ( bin2hex ( $result )); } public function decrypt( $string ) { $result = FALSE ; switch ( $this -> version) { case 11: $result = $this ->decryptEleven( $string ); break ; case 12: $result = $this ->decryptTwelve( $string ); break ; default : break ; } return $result ; } protected function decryptEleven( $upperString ) { $string = hex2bin( strtolower ( $upperString )); $round = intval ( floor ( strlen ( $string ) / 8 )); $leftLength = strlen ( $string ) % 8 ; $result = ‘‘ ; $currentVector = $this -> blowIv; for ( $i = 0; $i < $round ; $i ++ ) { $encryptedBlock = substr ( $string , 8 * $i , 8 ); $temp = $this ->xorBytes( $this ->decryptBlock( $encryptedBlock ), $currentVector ); $currentVector = $this ->xorBytes( $currentVector , $encryptedBlock ); $result .= $temp ; } if ( $leftLength ) { $currentVector = $this ->encryptBlock( $currentVector ); $result .= $this ->xorBytes( substr ( $string , 8 * $i , $leftLength ), $currentVector ); } return $result ; } protected function decryptTwelve( $upperString ) { $string = hex2bin( strtolower ( $upperString )); return openssl_decrypt( $string , ‘AES-128-CBC‘, $this ->aesKey, OPENSSL_RAW_DATA, $this -> aesIv); } } use FatSmallTools\NavicatPassword; // 需要指定版本,11或12 //$navicatPassword = new NavicatPassword(12); $navicatPassword = new NavicatPassword(11 ); // 解密,15057D7BA390=密码 $decode = $navicatPassword ->decrypt(‘15057D7BA390‘ ); echo $decode ."\n";

整完收工

Navicat 解析已有 Mysql 密码

标签:run   密码   res   nbsp   color   atp   pre   false   sha   

查看更多关于Navicat 解析已有 Mysql 密码的详细内容...

  阅读:27次