java - 如何让 JSCh/JCE 与 Java 1.4 一起工作?

标签 java jsch jce

根据 http://www.jcraft.com/jsch/ , JSch 使用纯 Java,但它依赖于 Java Cryptography Extension (JCE)。众所周知,JSch 可以与 J2SE 1.4.0 或更高版本一起使用(不需要额外的库)。

在任何人建议我升级之前(这确实会让我的生活更轻松),这不是一个选择:我必须让它在 Java 1.4.2 下工作。

因此,我下载了 JSch 0.1.54 源代码(和 JZLib 1.1.3 源代码)并修复了一些小问题。剩下的绊脚石是 JCE。没有它,以下类(从 Java 1.5 开始在 java.security.interfaces 下找到)将丢失:

Error:(40, 3) java: cannot find symbol
  symbol:   class ECFieldFp
  symbol:   class ECGenParameterSpec
  symbol:   class ECParameterSpec
  symbol:   class ECPoint
  symbol:   class ECPrivateKey
  symbol:   class ECPrivateKeySpec
  symbol:   class ECPublicKey
  symbol:   class ECPublicKeySpec
  symbol:   class EllipticCurve

满足此需求的 JCE 源或 jar 在哪里? Bouncy CaSTLe 页面 ( https://www.bouncycastle.org/latest_releases.html ) 似乎是解决方案的一部分,但 Java 1.4 的下载选择令人眼花缭乱。我尝试了 lcrypto-jdk14-157 但它与上面的列表相比是不完整的:它仅提供 ECPointECPrivateKey

最佳答案

根据change log , 自版本 0.1.52 以来添加了支持。这些类用于com/jcraft/jsch/jce/KeyPairGenECDSA.javaKeyPairECDSA.javaECDH.havaSignatureECDSA .java 和其他支持 ECDSA key 的新文件。

如果您不必连接仅支持 ECDSA key 的服务器。一种解决方案是从 sourceforge.net 下载源代码,使用 JDK 1.4.2 构建 jar 文件。存在一个兼容问题:

jsch-0.1.51/src/main/java/com/jcraft/jsch/Util.java:490: replace(char,char) in java.
lang.String cannot be applied to (java.lang.String,java.lang.String)
    str = str.replace("~", System.getProperty("user.home"));

您所要做的就是修复此错误。

关于java - 如何让 JSCh/JCE 与 Java 1.4 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44333397/

相关文章:

java - JSch channel.disconnect 阻止打印日志

jetty - EC2 Linux 机器上安装的 OpenJDK 8 不支持 ECDHE 密码套件

java - 读取pkcs12证书信息

java - 为什么在 Java 中从密码派生 key 时需要 SecretKeySpec?

java - 每次工作后更新 IStatusLineManager 中的 IProgressMonitor()

java - Java 中测量耗时的最快方法

java - sftp 和 ftp 的浏览目录选项

java - SWT 使用 ContentProposalAdapter 显示 HTML

java - 上传 .jar 文件并运行它。开类类

java - JSch ChannelExec OutputStream 不显示程序输出。但是它适用于 shell 脚本