1

我正在尝试使用 silvertunnel netlib 连接到一个 tor 隐藏服务,但我一直遇到同样的异常:

线程“org.silvertunnel.netlib.layer.tor.directory.DirectoryManagerThread”中的异常 java.lang.NoSuchMethodError: org.bouncycastle.asn1.ASN1InputStream.readObject()Lorg/bouncycastle/asn1/DERObject; org.bouncycastle.openssl.PEMReader.readRSAPublicKey(PEMReader.java:193) org.silvertunnel.netlib.layer.tor.util.Encryption.extractPublicRSAKey org.bouncycastle.openssl.PEMReader.readObject(PEMReader.java:110) (Encryption.java:342) 在 org.silvertunnel.netlib.layer.tor.directory.AuthorityKeyCertificate.(AuthorityKeyCertificate.java:104) 在 org.silvertunnel.netlib.layer.tor.directory.AuthorityKeyCertificates.(AuthorityKeyCertificates.java:100) ) 在 org.silvertunnel.netlib.layer.tor.directory 的 org.silvertunnel.netlib.layer.tor.directory.AuthorityKeyCertificates.(AuthorityKeyCertificates.java:80)。

我尝试了不同版本的 bouncycastle,但我就是无法让它工作。有谁知道问题可能是什么?

这是我的代码:

String host = "some_site.onion";
    int port = 7878;
    TcpipNetAddress remoteAddress = new TcpipNetAddress(host, port);
    NetLayer netLayer = NetFactory.getInstance().getNetLayerById(NetLayerIDs.TOR);
    netLayer.waitUntilReady();
    NetSocket netSocket = netLayer.createNetSocket(null, null, remoteAddress);
    BufferedReader br = new BufferedReader(new InputStreamReader(netSocket.getInputStream()));
    System.out.println(br.readLine());
    br.close();
    netSocket.close();
4

2 回答 2

0

Silvertunnel 已过时,您应该改用SilverTunnel-NG。SilverTunnel-NG 使用的是 spongycastle,因此它也与 Android 兼容。

您也可以在github上找到 SilverTunnel-NG 。

于 2016-03-12T22:58:24.737 回答
0

您的 java 安装中可能有一个充气城堡版本,并且由于一个版本试图调用另一个版本而导致此错误。检查名称以“bcprov”开头的文件JAVA_HOME/jre/lib/ext/和目录。JAVA_HOME/lib


好的,既然您评论说这不起作用,我仍然认为您的类路径上有多个版本的 bouncycastle。具体来说,我认为你有不同版本的bcprovbcpkix罐子。因此,让我们编写一个简短的 java 程序来查找它们:

import java.net.URL;
import java.util.Enumeration;

public class FindBouncy {
    static void printResources(String n) throws Exception {
        Enumeration<URL> e = FindBouncy.class.getClassLoader().getResources(n);
        if (!e.hasMoreElements()) {
            System.out.println(n + " not found!");
        } else {
            System.out.println(n + " found as:");
            while(e.hasMoreElements()) {
                System.out.println("    " + e.nextElement());
            }
        }
    }
    public static void main(String argv[]) throws Exception {
        printResources("org/bouncycastle/openssl/PEMReader.class");
        printResources("org/bouncycastle/asn1/ASN1InputStream.class");
    }
}

在 Eclipse 中运行它并找到“PEMReader”类(旧版本的 bcpkix jar 中的旧类)和“ASN1InputStream”类(应该在新旧 bcprov jar 中的类)的来源。使用彼此匹配的那些 jar 版本。

于 2016-01-19T02:02:27.793 回答