Navicat 解析已有 Mysql 密码
时间:2021-07-01 10:21:17
帮助过:18人阅读
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