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

news2024/12/1 10:23:09

前言

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云盘

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

241130_昇思MindSpore函数式自动微分

241130_昇思MindSpore函数式自动微分 函数式自动微分是Mindspore学习框架所特有的&#xff0c;更偏向于数学计算的习惯。这里也是和pytorch差距最大的部分&#xff0c;具体体现在训练部分的代码&#xff0c;MindSpore是把各个梯度计算、损失函数计算 在这幅图中&#xff0c;右…

菱形打印(Python)

“以块组合块”&#xff0c;以行凝结循环打印。 (笔记模板由python脚本于2024年11月30日 19:55:22创建&#xff0c;本篇笔记适合正在学习python循环的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”…

【QT入门到晋级】QT项目打生产环境包--(Linux和window)

前言 使用QTcreator完成正常编译后&#xff0c;在构建目录中有可执行程序生成&#xff0c;如果直接把可执行程序拷贝到干净的生产环境上是无法运行成功的&#xff0c;使用ldd&#xff08;查看程序依赖包&#xff09;会发现缺失很多QT的特性包&#xff0c;以及将介绍国产Linux桌…

Super Vlan与Mux Vlan

SuperVlan VLAN Aggregation&#xff0c; 也称 Super-VLAN : 指 在一个物理网络内&#xff0c;用多个 VLAN &#xff08;称为 Sub-VLAN &#xff09;隔离 广播域&#xff0c;并将这些 Sub-VLAN 聚合成一个逻辑的 VLAN &#xff08;称为 Super-VLAN &#xff09;&#xff0c;这…

蓝牙定位的MATLAB程序,四个锚点、三维空间

这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念&#xff0c;并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…

Hutool 秒速实现 2FA 两步验证

前言 随着网络安全威胁的日益复杂&#xff0c;传统的用户名和密码认证方式已不足以提供足够的安全保障。为了增强用户账户的安全性&#xff0c;越来越多的应用和服务开始采用多因素认证&#xff08;MFA&#xff09;。基于时间的一次性密码&#xff08;TOTP, Time-based One-Ti…

【继承】—— 我与C++的不解之缘(十九)

前言&#xff1a; 面向对象编程语言的三大特性&#xff1a;封装、继承和多态 本篇博客来学习C中的继承&#xff0c;加油&#xff01; 一、什么是继承&#xff1f; ​ 继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段&#xff0c;它允许我们在保持原有类…

【目标跟踪】Anti-UAV数据集详细介绍

Anti-UAV数据集是在2021年公开的专用于无人机跟踪的数据集&#xff0c;该数据集采用RGB-T图像对的形式来克服单个类型视频的缺点&#xff0c;包含了318个视频对&#xff0c;并提出了相应的评估标准&#xff08;the state accurancy, SA)。 文章链接&#xff1a;https://arxiv.…

偏差-方差权衡(Bias–Variance Tradeoff):理解监督学习中的核心问题

偏差-方差权衡&#xff08;Bias–Variance Tradeoff&#xff09;&#xff1a;理解监督学习中的核心问题 在机器学习中&#xff0c;我们希望构建一个能够在训练数据上表现良好&#xff0c;同时对未见数据也具有强大泛化能力的模型。然而&#xff0c;模型的误差&#xff08;尤其…

Figma入门-原型交互

Figma入门-原型交互 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的&#xff0c;对…

Windows系统怎么把日历添加在桌面上用来记事?

在众多电脑操作系统中&#xff0c;Windows系统以其广泛的用户基础和强大的功能&#xff0c;成为许多人的首选。对于习惯于在电脑前工作和学习的用户来说&#xff0c;能够直接在桌面上查看和记录日历事项&#xff0c;无疑会大大提高工作效率和生活便利性。今天&#xff0c;就为大…

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录&#xff0c;有别于基础语法&#xff0c;很多内容只要求会用就行&#xff0c;无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout&#xff1a; 1.3 string以下是字符串的一些简介&#xff1a;字符串…

大数据新视界 -- 大数据大厂之 Hive 数据压缩:优化存储与传输的关键(上)(19/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

RNN And CNN通识

CNN And RNN RNN And CNN通识一、卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;1. 诞生背景2. 核心思想和原理&#xff08;1&#xff09;基本结构&#xff1a;&#xff08;2&#xff09;核心公式&#xff1a;&#xff08;3&#xff09;关…

求整数的和与均值

求整数的和与均值 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 读入n&#xff08;1 < n < 10000&#xff09;个整数&#xff0c;求它们的和与均值。 输入 输入第一行是一个整数n&#xff0c;…

配置idea环境进行scala编程

这里用的jdk是jdk-8u161,scala版本是2.12.0 在d盘新建一个本地仓库用来存放下载的maven包&#xff0c;在里面创建如下两个文件 更改settings文件为下面的样子 点击左下角的设置&#xff0c;更改maven本地仓库的位置&#xff08;默认在c盘用户目录下的.m2文件中&#xff0c;更改…

WSL简介与安装流程(Windows 下的 Linux 子系统)

目录 1.wsl安装 1.1 WSL简介 1.1.1 WSL 的主要功能 1.1.2 WSL 的版本 1.1.3 为什么使用 WSL&#xff1f; 1.1.4 WSL 的工作原理 1.1.5 WSL 的常见使用场景 1.1.6 与虚拟机的区别 1.1.7 适合使用 WSL 的人群 1.2 启用 WSL 1.2.1 打开 PowerShell&#xff08;管理员模…

【Java树】二叉树遍历的简单实现

二叉树的遍历 二叉树的遍历是值按照一定顺序访问二叉树中所有结点的过程&#xff0c;确保每个结点被访问且仅被访问一次。遍历操作是对二叉树的基础操作&#xff0c;用于后续的查找、排序和路径计算等功能。 二叉树的遍历有以下几种常见方式&#xff1a;深度遍历&#xff08;…

STL算法之set相关算法

STL一共提供了四种与set(集合)相关的算法&#xff0c;分别是并集(union)、交集(intersection)、差集(difference)、对称差集(symmetric difference)。 目录 set_union set_itersection set_difference set_symmetric_difference 所谓set&#xff0c;可细分为数学上定义的和…

鸿蒙ArkUI-X已更新适配API13啦

ArkUI-X 5.0.1 Release版配套OpenHarmony 5.0.1 Rlease&#xff0c;API 13&#xff0c;新增适配部分API 13接口支持跨平台&#xff1b;框架能力进一步完善&#xff0c;支持Android应用非压缩模式&#xff0c;支持Android Fragment对接跨平台。ACE Tools工具易用性提升&#xff…