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里的SSH连接记录方法-科技-电脑博士
推荐下载地址:
官网地址(最新版下载地址):https://www.hostbuf.com/t/988.html
FinalShell v4.5.12 远程连接SSH客户端解锁高级专业版
本文来自博客园,作者:明金同学,转载请注明原文链接:https://www.cnblogs.com/vmuu/p/18599399
公众号:【明金同学】