在finalshell连接服务器忘记密码,程序解析

该代码示例展示了如何使用Java进行MD5哈希运算以及DES加密解密过程。首先从JSON文件中获取密码值,然后利用MD5函数处理数据,接着通过DES算法进行解密操作,最终解码出原始密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先到finalshell安装目录中的conn文件夹中找到对应的服务器连接json文件
在这里插入图片描述
2.在对应json文件中找到password的值
在这里插入图片描述
3.运行解析程序

	public static byte[] md5(byte[] data) {
        byte[] res=null;
        try {
            MessageDigest m;
            m = MessageDigest.getInstance("MD5");
            m.update(data, 0, data.length);
            res=m.digest();
        } catch (NoSuchAlgorithmException e) {
            log.error(e.getMessage());
        }
        return res;
    }

	static byte[] ranDomKey(byte[] head) {
        long ks = 3680984568597093857L / (long)(new Random(head[5])).nextInt(127);
        Random random = new Random(ks);
        int t = head[0];
        for(int i = 0; i < t; ++i) {
            random.nextLong();
        }
        long n = random.nextLong();
        Random r2 = new Random(n);
        long[] ld = new long[]{(long)head[4], r2.nextLong(), (long)head[7], (long)head[3], r2.nextLong(), (long)head[1], random.nextLong(), (long)head[2]};
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(bos);
        long[] var15 = ld;
        int var14 = ld.length;
        for(int var13 = 0; var13 < var14; ++var13) {
            long l = var15[var13];
            try {
                dos.writeLong(l);
            } catch (IOException var18) {
                log.error(var18.getMessage());
            }
        }
        try {
            dos.close();
        } catch (IOException var17) {
            log.error(var17.getMessage());
        }
        byte[] keyData = bos.toByteArray();
        keyData = md5(keyData);
        return keyData;
    }

	public static byte[] desDecode(byte[] data, byte[] head) throws Exception {
        SecureRandom sr = new SecureRandom();
        DESKeySpec dks = new DESKeySpec(head);
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(2, securekey, sr);
        return cipher.doFinal(data);
    }

	public static String decodePass(String data) throws Exception {
        if (data == null) {
            return null;
        } else {
            String rs = "";
            byte[] buf = Base64.getDecoder().decode(data);
            byte[] head = new byte[8];
            System.arraycopy(buf, 0, head, 0, head.length);
            byte[] d = new byte[buf.length - head.length];
            System.arraycopy(buf, head.length, d, 0, d.length);
            byte[] bt = desDecode(d, ranDomKey(head));
            rs = new String(bt);
            return rs;
        }
    }

	public static void main(String[] args) throws Exception {
        System.out.println(decodePass("第二步password值"));
    }
### 如何在忘记 Linux 密码后重新设置密码以恢复 FinalShell 连接 #### 方法一:单用户模式下重置密码 对于大多数基于 Red Hat 的发行版(如 CentOS),可以利用 GRUB 启动菜单进入单用户模式来更改 root 用户的密码。 1. 重启计算机,在启动过程中按住 `Shift` 键直到出现 GRUB 菜单。 2. 使用上下箭头键选择要编辑的操作系统条目,通常是第一个选项,默认带有最新内核版本号。按下 'e' 编辑该命令行[^2]。 3. 找到以 "linux" 或者 "linux16" 开始的那一行,在这一行最后添加 `single` 或者 `init=/bin/bash` 参数,这会使得系统启动至单用户模式而不是正常图形界面或多用户文本环境。 4. 按下 Ctrl+X 或 F10 来继续引导过程并执行修改后的指令集。 5. 当提示符返回时输入 `mount -o remount,rw /` 命令使根文件系统可写入。 6. 接着运行 passwd 工具更换管理员账户的新密码: ```bash passwd ``` 7. 完成之后同步磁盘缓存(`sync`) 并强制关闭电源 (`reboot -f`) ,后者绕过了正常的关机流程从而防止可能存在的权限检查阻止再次进入单用户状态。 8. 正常登陆即可使用新设定好的凭证通过 FinalShell 登录服务器了。 #### 方法二:Live CD/USB 方式 如果上述方法不可用,则考虑创建一个 Live USB/DVD 驱动器,并从中启动机器。这种方法适用于几乎所有的 Linux 发行版。 1. 下载对应架构的 ISO 映像文件制作启动介质。 2. 插入准备好的 U 盘或光碟,调整 BIOS 设置让其优先从外部设备加载 OS。 3. 成功启动后打开终端模拟器窗口,挂载现有硬盘分区上的 `/etc/shadow` 文件所在的目录结构。 4. 修改此文件删除特定用户的加密哈希串部分,保存变更退出编辑器。 5. 关闭当前活动 session 返回初始画面,此时应该能够无阻碍地访问 shell 提示符而无需提供任何凭据信息。 6. 利用 chroot 技术切换工作路径到实际安装位置下面,进而调用 passwd 更改所需 ID 的口令字符串。 7. 结束所有操作以后卸除临时附加存储装置恢复正常开机顺序尝试登录验证效果。 以上两种方案都可以有效地帮助找回丢失的 Linux 系统登录密码,以便顺利通过 FinalShell 实现远程管理功能[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值