You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为SSHJ的SSHClient配置允许的传输和MAC加密算法

SSHJ限制指定加密算法配置方案

直接通过自定义DefaultConfig转换逗号分隔的配置字符串,即可实现和JSch等效的加密算法限制效果,完整实现示例如下:

import net.schmizz.sshj.SSHClient;
import net.schmizz.sshj.DefaultConfig;
import net.schmizz.sshj.common.Factory;
import java.util.Arrays;
import java.util.stream.Collectors;

// 从配置文件读取加密算法配置
String transportCiphersStr = "aes256-gcm,aes256-ctr,aes256-etcera";
String macCiphersStr = "hmac-sha3-512,...";

DefaultConfig sshConfig = new DefaultConfig();

// 转换并设置传输加密算法,等效于JSch的cipher.s2c、cipher.c2s配置
var cipherFactories = Arrays.stream(transportCiphersStr.split(","))
        .map(String::trim)
        .map(cipherName -> Factory.Named.Util.find(sshConfig.getCipherFactories(), cipherName))
        .collect(Collectors.toList());
sshConfig.setCipherFactories(cipherFactories);

// 转换并设置MAC算法
var macFactories = Arrays.stream(macCiphersStr.split(","))
        .map(String::trim)
        .map(macName -> Factory.Named.Util.find(sshConfig.getMACFactories(), macName))
        .collect(Collectors.toList());
sshConfig.setMACFactories(macFactories);

// 使用自定义配置初始化SSHClient
SSHClient sshClient = new SSHClient(sshConfig);

// 后续正常执行连接、认证、SFTP操作即可

注意事项

  • 算法名称需和SSHJ内置支持的名称完全匹配,若配置了未内置的算法,find方法会返回null,需自行实现对应算法工厂后再注册使用。
  • 配置的算法列表会同时作用于客户端到服务端、服务端到客户端的双向通信,和JSch原有配置逻辑一致。
  • 算法协商优先级按配置字符串中的排列顺序生效,排在前面的算法会优先被使用。

内容的提问来源于stack exchange,提问作者quantumferret

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:39:02