You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.8 KiB
4.8 KiB
Navicat
中怎么查看已连接保存的密码
-
首先 导出连接,点击文件,选择导出连接
- 这里记着 导出密码!!! 不然导出的文件里不包含加密的密码
- 获取到 connections.ncx 文件
-
找到 文件里 password 字段的值
- 使用记事本打开connections.ncx 文件
- 然后CTRL+F查找password,将字段值进行复制
-
开始破译密码
<? php namespace FatSmallTools;
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); //解密//
//$decode = $navicatPassword - > decrypt('15057D7BA390');
$decode = $navicatPassword - > decrypt('474BCC404BEB77220313D26ABA8AC8D064E2F86E58FCA802BA9A5A54EE67F4F3');
echo $decode.
"\n";
解密结果:
DsideaL4r5t6y7u!@#