Windows MySQL密码丢失?教你轻松找回的方法

本文详细介绍了如何通过Windows注册表找到Navicat的密码保存位置,以及使用PHP代码在线工具中的加密/解密函数来解密存储在navicat中的密码。作者分享了两种版本(11和12)的解密方法。
摘要由CSDN通过智能技术生成

此法本人已多次验证使用,绝对好用👇👇👇

第1步

(1)打开注册表编辑器:win+R,输入:regedit ,电脑玩的6的小伙伴应该都熟哈~

(2)找到navicat密码保存位置

\HKEY_CURRENT_USER\Software\PremiumSoft

第2步

(1)打开PHP代码在线工具

代码在线运行 - 在线工具​tool.lu/coderunner/icon-default.png?t=N7T8https://link.zhihu.com/?target=https%3A//tool.lu/coderunner/

(2)复制PHP解密代码

<?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   11查不到就用12

//$navicatPassword = new NavicatPassword(12);

$navicatPassword = new NavicatPassword(11);

 

//解密
$decode = $navicatPassword->decrypt('刚才pwd文件复制下来的数据');
echo $decode."\n";

修改的位置与解析结果

绝对是实用的小干货,感谢小伙伴们的关注哈~_~

  • 12
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 可以使用以下步骤重置MySQL密码: 1. 停止MySQL服务。 2. 使用管理员权限运行cmd,输入以下命令:mysqld --skip-grant-tables 3. 再开一个cmd窗口,输入以下命令:mysql -u root 4. 使用下面的命令重置密码:update mysql.user set authentication_string=password("新密码") where user='root'; 5. 刷新权限:flush privileges; 6. 退出MySQL命令行,重新启动MySQL服务。 现在就可以使用新密码登录MySQL了。 ### 回答2: 在Windows下,如果记了MySQL密码,可以通过以下步骤进行重置或更改密码: 1. 在WindowsMySQL安装目录下找到my.ini文件(默认路径是C:\Program Files\MySQL\MySQL Server X.X\)。 2. 使用文本编辑器打开my.ini文件,并在[mysqld]部分中添加一行:skip-grant-tables。这将使MySQL跳过密码验证步骤。 3. 保存并关闭my.ini文件。 4. 打开Windows命令提示符,输入以下命令来停止MySQL服务:net stop mysql。 5. 输入以下命令来以安全模式启动MySQL服务:mysqld --skip-grant-tables。 6. 打开新的命令提示符窗口,输入以下命令来连接到MySQL服务器:mysql -u root。 7. 如果成功连接到MySQL服务器,可以通过以下命令来更改密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 注意:将 'root' 替换为你的用户名, 'localhost' 替换为你的主机名, 'new_password' 替换为你希望设置的新密码。 8. 更改密码后,可以通过以下命令来退出MySQL命令行终端:quit。 9. 关闭所有命令提示符窗口。 10. 打开my.ini文件并删除之前添加的 skip-grant-tables 行。 11. 重新启动MySQL服务:net start mysql。 现在,你应该可以使用新密码来登录MySQL了。请确保在重置密码后将my.ini文件恢复到之前的状态,以保持系统的安全性。 ### 回答3: 如果在Windows操作系统下记了MySQL数据库密码,可以按照以下步骤进行重置密码: 1. 关闭正在运行的MySQL服务。 2. 打开命令提示符窗口,切换到MySQL的安装目录下的bin文件夹。 3. 运行以下命令,以跳过密码验证的方式启动MySQL服务:mysqld --skip-grant-tables。 4. 在另一个命令提示符窗口中,再次切换到MySQL的安装目录下的bin文件夹,运行以下命令登录MySQLmysql -u root。 5. 进入MySQL后,使用以下命令更新root账户的密码:UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root' and Host='localhost';(这里将‘新密码’替换为您想要设置的新密码) 6. 运行以下命令,刷新MySQL的角色和权限:flush privileges; 7. 关闭这两个命令提示符窗口。 8. 重新打开MySQL服务,可以使用您设置的新密码登录MySQL数据库了。 请注意,以上步骤仅适用于在Windows操作系统下重置本地MySQL数据库密码。如果是远程访问MySQL,还需要相应的授权和端口等配置。如果无法解决问题,建议参考相关的MySQL官方文档或寻求专业的技术支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远见阁

你的鼓励就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值