FinalShell工具数据备份升级、密码解密方法

前言

FinalShell 作为国产的服务器管理工具和远程终端软件。一个一体化的运维工具,在国内运维人员中还是比较受欢迎。它整合了多个常用功能,界面友好,使用方便。不过它是一个闭源的商业软件,虽然提供免费版本,但部分高级功能需要付费使用。

对于需要管理远程服务器的用户来说,它是一个不错的选择,但如果对软件的开源性和安全性有较高要求,可能需要考虑其他替代方案,比如PuTTY、XShell等。

之前一直在使用4.3.1版本,最近打开老是提示升级,于是换到了4.5.12版本,记录一下数据迁移方法。

这个工具其他版本的备份方法其实也是一样的。

数据迁移

不同版本之间数据迁移其实只需要将下面这几个文件夹的内容复制过去就可以了:

如果不想付费使用同步,其实也可以通过网盘同步进行自动备份FinalShell的整个安装目录,比如onedrive,百度网盘自动同步等。

/conn             # 服务器连接信息配置文件夹
config.json       # 基本配置文件
knownhosts.json   # 服务器密钥
tcconfig.json     # 一些缓存

密码解密

经常在软件中使用,有的时候很容易忘记密码,FinalShell对密码是加密存储的,如果忘记密码的话就会很麻烦,不过好在已经有人写了代码,可以直接将文件中的密钥拿过来直接解密。

可以在\backup\connect_config_XXXX文件中,找到加密后的服务器密钥,然后将下面代码中的PgpoZmsfN3j3rMA10bxQU4ehh9/EqGJB替换为自己的密钥,然后运行代码解密就出来了

另外,为了方便也可以直接打开下面的网址,在线运行代码。

https://c.runoob.com/compile/10/

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

/**
 * FinalShell密码解密工具类
 * 用于解密FinalShell存储的加密密码
 */
public class FinalShellDecodePass {
    
    /**
     * 主方法,用于测试密码解密
     * @param args 命令行参数
     * @throws Exception 可能抛出的异常
     */
    public static void main(String[] args) throws Exception {
        // 测试解密一个加密后的密码
        System.out.println(decodePass("PgpoZmsfN3j3rMA10bxQU4ehh9/EqGJB"));
    }

    /**
     * DES解密方法
     * @param data 待解密的数据
     * @param head 密钥数据
     * @return 解密后的字节数组
     * @throws Exception 解密过程中可能抛出的异常
     */
    public static byte[] desDecode(byte[] data, byte[] head) throws Exception {
        // 创建安全随机数生成器
        SecureRandom sr = new SecureRandom();
        // 创建DES密钥规范
        DESKeySpec dks = new DESKeySpec(head);
        // 获取DES密钥工厂实例
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        // 生成密钥
        SecretKey securekey = keyFactory.generateSecret(dks);
        // 获取DES加密器实例
        Cipher cipher = Cipher.getInstance("DES");
        // 初始化加密器为解密模式(模式2)
        cipher.init(2, securekey, sr);
        // 执行解密操作
        return cipher.doFinal(data);
    }

    /**
     * 解密密码的主要方法
     * @param data Base64编码的加密数据
     * @return 解密后的明文密码
     * @throws Exception 解密过程中可能抛出的异常
     */
    public static String decodePass(String data) throws Exception {
        if (data == null) {
            return null;
        } else {
            String rs = "";
            // 将Base64编码的数据解码为字节数组
            byte[] buf = Base64.getDecoder().decode(data);
            // 提取前8字节作为头部数据
            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;
        }
    }

    /**
     * 根据头部数据生成随机密钥
     * @param head 头部数据(8字节)
     * @return 生成的MD5密钥
     */
    static byte[] ranDomKey(byte[] head) {
        // 使用特定算法生成随机数种子
        long ks = 3680984568597093857L / (long)(new Random((long)head[5])).nextInt(127);
        Random random = new Random(ks);
        int t = head[0];
        // 进行t次随机数生成
        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) {
                var18.printStackTrace();
            }
        }
        try {
            dos.close();
        } catch (IOException var17) {
            var17.printStackTrace();
        }
        // 获取字节数组并计算其MD5值作为最终密钥
        byte[] keyData = bos.toByteArray();
        keyData = md5(keyData);
        return keyData;
    }

    /**
     * 计算MD5值的方法
     * @param data 输入数据
     * @return MD5哈希值的字节数组
     */
    public static byte[] md5(byte[] data) {
        String ret = null;
        byte[] res = null;
        try {
            // 获取MD5算法实例
            MessageDigest m;
            m = MessageDigest.getInstance("MD5");
            // 更新数据
            m.update(data, 0, data.length);
            // 计算MD5值
            res = m.digest();
            // 将结果转换为16进制字符串(未使用)
            ret = new BigInteger(1, res).toString(16);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return res;
    }
}

参考

finalshell 免费同步方案

finalshell导出密码解密解密

备份finalshell里的SSH连接记录方法-科技-电脑博士

推荐下载地址:

官网地址(最新版下载地址):https://www.hostbuf.com/t/988.html

FinalShell v4.5.12 远程连接SSH客户端解锁高级专业版

FinalShell专业版(ssh工具)v4.5.12中文破解版 - 423Down

FinalShell官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/926316.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华三(HCL)和华为(eNSP)模拟器共存安装手册

接上章叙述&#xff0c;解决同一台PC上同时部署华三(HCL)和华为(eNSP&#xff09;模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本&#xff0c;可以直接和eNSP兼容Oracle VirtualBox&#xff0c;而其他版本均使用Oracle VirtualBox v6以上的版本&#xff0c;…

0.shell 脚本执行方式

1.脚本格式要求 &#x1f951;脚本以 #!/bin/bash 开头 &#x1f966; 脚本要有可执行权限 2.执行脚本的两种方式 &#x1f96c; 方式1&#xff1a;赋予x执行权限 &#x1f952; ​​​​​​​方式2&#xff1a; sh执行 ​​​​​​​

EXCEL截取某一列从第一个字符开始到特定字符结束的字符串到新的一列

使用EXCEL中的公式进行特定截取 假设列A是一组产品的编码&#xff0c;我们需要的数据是“-”之前的字段。 我们需要在B1单元格输入公式“LEFT(A1,SEARCH("-",A1)-1)”然后选中B1至B4单元格&#xff0c;按“CTRLD”向下填充&#xff0c;就可以得出其它几行“-”之前的…

ComfyUI绘画|图生图工作流搭建

今天先分享到这里~ ComfyUI绘画|关于 ComfyUI 的学习建议

Css—实现3D导航栏

一、背景 最近在其他的网页中看到了一个很有趣的3d效果&#xff0c;这个效果就是使用css3中的3D转换实现的&#xff0c;所以今天的内容就是3D的导航栏效果。那么话不多说&#xff0c;直接开始主要内容的讲解。 二、效果展示 三、思路解析 1、首先我们需要将这个导航使用一个大…

书生大模型实战营第四期-入门岛-4. maas课程任务

书生大模型实战营第四期-入门岛-4. maas课程任务 任务一、模型下载 任务内容 使用Hugging Face平台、魔搭社区平台&#xff08;可选&#xff09;和魔乐社区平台&#xff08;可选&#xff09;下载文档中提到的模型&#xff08;至少需要下载config.json文件、model.safetensor…

服务器密码错误被锁定怎么解决?

当服务器密码错误多次导致账号被锁定时&#xff0c;解决方法需要根据服务器的操作系统&#xff08;如 Linux 或 Windows &#xff09;和具体服务器环境来处理。以下是常见的解决办法&#xff1a; 一、Linux 服务器被锁定的解决方法 1. 使用其他用户账号登录 如果有其他未被…

初识ProtoBuf以及环境搭建(Win和Ubuntu)

初始ProtoBuf 序列化和反序列化的概念 序列化&#xff1a;把对象转换为字节序列的过程 称为对象的序列化。 反序列化&#xff1a;把字节序列恢复为对象的过程 称为对象的反序列化。 什么情况下需要序列化和反序列化&#xff1f; 存储数据&#xff1a;当你想把的内存中的对象状…

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型&#xff09; 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型&#xff09; 1. 项目说明 2. 数据说明 &#xff08;1&#xff09;心跳信号分类预测数据集 3. 模型训练 &#xff08;1&#xff09;项目安装 &…

【Nginx】核心概念与安装配置解释

文章目录 1. 概述2. 核心概念2.1.Http服务器2.2.反向代理2.3. 负载均衡 3. 安装与配置3.1.安装3.2.配置文件解释3.2.1.全局配置块3.2.2.HTTP 配置块3.2.3.Server 块3.2.4.Location 块3.2.5.upstream3.2.6. mine.type文件 3.3.多虚拟主机配置 4. 总结 1. 概述 Nginx是我们常用的…

循环神经网络:从基础到应用的深度解析

&#x1f35b;循环神经网络&#xff08;RNN&#xff09;概述 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一种能够处理时序数据或序列数据的深度学习模型。不同于传统的前馈神经网络&#xff0c;RNN具有内存单元&#xff0c;能够捕捉序列中前后信息…

使用vcpkg自动链接tinyxml2时莫名链接其他库(例如boost)

使用vcpkg自动链接tinyxml2时莫名链接其他库&#xff08;例如boost&#xff09; vcpkg的自动链接功能非常方便&#xff0c;但在某些情况下会出现过度链接的问题。 链接错误症状 以tinyxml2为例&#xff0c;程序中调用tinyxml2的函数后&#xff0c;若vcpkg中同时存在opencv和…

鸿蒙开发-HMS Kit能力集(应用内支付、推送服务)

1 应用内支付 开发步骤 步骤一&#xff1a;判断当前登录的华为账号所在服务地是否支持应用内支付 在使用应用内支付之前&#xff0c;您的应用需要向IAP Kit发送queryEnvironmentStatus请求&#xff0c;以此判断用户当前登录的华为帐号所在的服务地是否在IAP Kit支持结算的国…

IDEA敲Web前端快捷键

1.html基础格式 英文符号TAB键 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, mini…

字符串算法题

目录 题目一——14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 1.1.两两比较 1.2.统一比较 题目二——5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09; 2.1.中心拓展算法 题目三——67. 二进制求和 - 力扣&#xff08;LeetCode&#xff09; 题目…

嵌入式Linux - UBoot学习篇

目录 使用tftp上传我们的zImage 在Ubuntu上安装TFTP 把我们的网线连接到Ubuntu上 mmc指令 基本命令 2. 重新扫描和分区管理 3. 硬件分区 4. 启动配置 5. 复位功能和 DSR 配置 关键警告与注意事项&#xff1a; 常见用途&#xff1a; mmc info mmc rescan mmc list …

Ubuntu 20.04 Server版连接Wifi

前言 有时候没有网线口插网线或者摆放电脑位置不够时&#xff0c;需要用Wifi联网。以下记录Wifi联网过程。 环境&#xff1a;Ubuntu 20.04 Server版&#xff0c;无UI界面 以下操作均为root用户&#xff0c;如果是普通用户&#xff0c;请切换到root用户&#xff0c;或者在需要权…

亚马逊自研大语言模型 Olympus 即将亮相,或将在 LLM 竞赛中掀起新波澜

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

采用片上光学相控阵的激光雷达

激光雷达基础知识 LIDAR 基于众所周知的 RADAR 原理雷达是20世纪初就存在的著名技术激光雷达使用光频率而不是无线电波 激光雷达和雷达 使用相控阵的激光雷达通过干涉来提高方向性 激光雷达的输出剖面是阵列因子和单天线远场的乘积。 N &#xff1a;天线数量 k &#xff1a;…

阿里云服务器(centos7.6)部署前后端分离项目(MAC环境)

Jdk17安装部署 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 选择自己需要的jdk版本进行下载。 通过mac终端scp命令上传下载好的jdk17到服务器的/usr/local目录下 scp -r Downloads/jdk-17.0.13_linux-x64_bin.tar.gz 用户名服务器ip地址:/us…