当前位置: 首页 > news >正文

jsch 升级 0.2.x 版本对 bcprov-jdk 的依赖分析

背景

某应用使用 jsch 0.1.x 版本进行 SFTP 操作,某主机上连接时出现了com.jcraft.jsch.JSchException: Algorithm negotiation fail算法协商异常,解决思路是升级 jsch 为 0.2.x 版本,但是工程中又有两种 org.bouncycastle.crypto 包的实现,一种是第三方 bcprov-jdk,一种是自定义封装类种打包了 bcprov-jdk* 的内容。

结果直接更换为高版本的 jar ,工程还是报错,只是异常原因在于这个包冲突。到底这个包和 bcprov-jdk 是什么关系呢?

使用 Opus4.5 模型分析

这个目录 /Users/xxx/Downloads/jsch-0.2.24.jar 来分析它是否依赖了
bcprov-jdk15on

分析结果,根据分析 jsch-0.2.24.jar:

结论:jsch-0.2.24 对 bcprov-jdk 是可选依赖(optional),不是必需依赖。

证据:

  1. MANIFEST.MF 中的 Import-Package:
    org.bouncycastle.crypto;version=“[1.79,2)”;resolution:=optional
    org.bouncycastle.crypto.digests;version=“[1.79,2)”;resolution:=optional
    org.bouncycastle.pqc.crypto.ntruprime;version=“[1.79,2)”;resolution:=optional
  2. 所有 BouncyCastle 包都标记为 resolution:=optional
  3. JAR 包结构:
    - com/jcraft/jsch/jce/ - 使用标准 JCE 的实现(AES, TripleDES 等)
    - com/jcraft/jsch/bc/ - 使用 BouncyCastle 的实现(Ed25519, ChaCha20 等)

需要 BouncyCastle 的功能:

  • Ed25519/Ed448 签名
  • X25519/X448 密钥交换
  • ChaCha20-Poly1305 加密
  • SNTRUP761、ML-KEM 后量子加密
  • Twofish、CAST128 等非标准算法

不需要 BouncyCastle 的功能:

  • RSA、ECDSA 签名
  • AES、3DES 加密
  • 标准 Diffie-Hellman 密钥交换

如果你的 SSH 服务器只使用标准算法,可以不添加 bcprov 依赖。

分析过程

由于包冲突,想把自定义封装中的 SM4 工具算法重写一下,用 Claude Code 的 sonnet4.5 模型重写工具,并兼容之前自定义算法的内容,写了一下午出来的结果都不对,无法兼容之前版本加密的内容的解密。

核心是 SM4 算法的密钥要求16byte=128bit,自定义封装的算法中密钥给了 64byte 的但是能正常加密和解密。Sonnet4.5 写的代码总是不能做好这个密钥长度的统一。今天切换成 Opus4.5 后,给昨天一样的命令,一次就写出来了 SM4 工具,而且能完美兼容旧版本。

感觉提示词思路是一样的,「实现一个加解密的工具类,实现加密和解密。要求如下:密钥是 64字节的字符串xxx,能兼容之前加密的结果。 」

现在我理解了实现方式。让我创建 SM4Utils 工具类,使用
Bouncycastle(项目已有依赖)来实现与 Xxx.jar 兼容的 SM4 加密解密。确实实现了,而且还顺手把依赖这个工具类的空白引用给加上了。

启示录

安装了 OpenClaw 使用的是 MiniMax 的模型,ClaudeCode 使用的是 Sonnet 模型,相同的编码问题问这两种 Agent ,Claude Code 更胜一筹,尤其是脚本编写,Claude Code 写的代码更严谨。

此外,使用 OpenClaw 总感觉不安全,它没有任何中间过程的输出,然后就把事情给完成了,中间有没有失控,看不到;相比之下,ClaudeCode 每一步都有输出,有确认,更有掌控感!

http://www.jsqmd.com/news/478879/

相关文章:

  • 假如有10条平行的轴线,怎样判断其中有4条是共面的
  • MongoDB知识点
  • 金融AI营销如何选型?原圈科技揭秘4大标准避坑指南
  • 2026年AI搜索生态爆发,用触有数据抢占六大平台可见率!
  • LangChain到底是啥?用大白话讲清楚
  • 将线程和锁构建图(后续通过检测环路以检测死锁)
  • 学长亲荐 9个降AI率软件降AIGC网站:本科生降AI率全测评与推荐
  • 2026年呼和浩特靠谱瓷砖大揭秘!哪种款式数量多你知道吗?
  • 哇塞!深圳市访客云产品1秒完成人证合一验证,你还不心动?
  • 拒绝纸上谈兵!破碎机振动治理,实测有效的定制化方案
  • 某端游外挂网络验证的分析与破解思路
  • 使用实时云渲染LarkXR顺利搭建云VR方案
  • Matlab中的一维无限能量艾里光束与一维有限能量艾里光束
  • 农经权二轮延包—带确认签字表的公示图
  • 方盾在口,安全在手:煤矿半面罩的职业健康使命
  • 轮毂电机分布式驱动车辆状态估计:EKF 与 UKF 的探索
  • 【Makefile 专家之路 | 基础篇】01. 万物起源:编译链接原理与 Makefile 的核心价值
  • Qt窗口模态设置
  • 别再拿AI生成“废片”了!Claude突发免费杀手锏,用动态白板降维打击传统图文交互
  • 讯维 AI 分布式可视化系统支持哪些 AI 智能应用,实际应用价值如何?
  • 老司机教你玩转智能避撞:从五次多项式到模型预测控制的那些事儿
  • 2026-03-14
  • YOLOv10全网首发:AAAI2026 | 融合PartialNet Block的C3k2-YOLO高效目标检测网络 | 轻量化涨点设计
  • 2026年好用的北京GEO优化公司排名出炉,哪家会是你的心头好?
  • 联合省选 2026
  • sdut-程序设计基础Ⅰ-实验四for循环(11-22)
  • 使用Conda和pip创建Python环境
  • 蓝牙连接不上的解决方法
  • 淘宝系逆向@阿里巴巴商家版-转人工逆向
  • 迁移学习中的负迁移风险:成因、检测与规避方案