Silvertunnel异常:java.lang.NoSuchMethodError:org.bouncycastle.asn1.ASN1InputStream.readObject()Lorg/bouncycastle/asn1/DERObject;

Silvertunnel异常:java.lang.NoSuchMethodError:org.bouncycastle.asn1.ASN1InputStream.readObject()Lorg/bouncycastle/asn1/DERObject;,java,tor,silvertunnel,Java,Tor,Silvertunnel,我正在尝试使用silvertunnel netlib连接到tor隐藏服务,但我一直收到相同的异常: 线程“org.silvertunnel.netlib.layer.tor.DirectoryManagerThread”java.lang.NoSuchMethodError:org.bounchycastle.asn1.ASN1InputStream.readObject()Lorg/bounchycastle/asn1/DERObject中出现异常; 在org.bouncycastle.ope

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

线程“org.silvertunnel.netlib.layer.tor.DirectoryManagerThread”java.lang.NoSuchMethodError:org.bounchycastle.asn1.ASN1InputStream.readObject()Lorg/bounchycastle/asn1/DERObject中出现异常; 在org.bouncycastle.openssl.PEMReader.readrsPublicKey(PEMReader.java:193)上 位于org.bounchycastle.openssl.PEMReader.readObject(PEMReader.java:110) 位于org.silvertunnel.netlib.layer.tor.util.Encryption.extractPublicRSAKey(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.AuthorityKeyCertificates.(AuthorityKeyCertificates.java:80) 位于org.silvertunnel.netlib.layer.tor.directory.directory.getAuthorityKeyCertificates(directory.java:492) 位于org.silvertunnel.netlib.layer.tor.directory.directory.updateNetworkStatusNew(directory.java:324) 位于org.silvertunnel.netlib.layer.tor.directory.directory.refreshListOfServers(directory.java:287) 位于org.silvertunnel.netlib.layer.tor.DirectoryManagerThread.updateDirectory(DirectoryManagerThread.java:60) 位于org.silvertunnel.netlib.layer.tor.directory.DirectoryManagerThread.run(DirectoryManagerThread.java:76)

我尝试过不同版本的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();

java安装中可能有一个版本的bouncy castle,导致此错误的原因是一个版本试图调用另一个版本。检查
JAVA\u HOME/jre/lib/ext/
JAVA\u HOME/lib
目录中名称以“bcprov”开头的文件


好的,既然你评论说这不起作用,我仍然认为你的类路径上有多个版本的bouncycastle。具体来说,我认为您有一个不同版本的
bcprov
bcpkix
jars。因此,让我们编写一个简短的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");
    }
}
import java.net.URL;
导入java.util.Enumeration;
公共类FindBouncy{
静态void printResources(字符串n)引发异常{
枚举e=FindBouncy.class.getClassLoader().getResources(n);
如果(!e.hasMoreElements()){
System.out.println(n+“未找到!”);
}否则{
System.out.println(n+“发现为:”);
而(e.hasMoreElements()){
System.out.println(“+e.nextElement());
}
}
}
公共静态void main(字符串argv[])引发异常{
printResources(“org/bouncycastle/openssl/PEMReader.class”);
printResources(“org/bouncycastle/asn1/ASN1InputStream.class”);
}
}

在eclipse中运行它,并找到“PEMReader”类(旧版本的bcpkix JAR中的旧类)和“ASN1InputStream”类(旧版本和新版本的bcprov JAR中的类)的来源。使用相互匹配的JAR版本。

您的java安装中可能有bouncy castle版本,导致此错误的原因是一个版本试图调用另一个版本。检查
JAVA\u HOME/jre/lib/ext/
JAVA\u HOME/lib
目录中名称以“bcprov”开头的文件


好的,既然你评论说这不起作用,我仍然认为你的类路径上有多个版本的bouncycastle。具体来说,我认为您有一个不同版本的
bcprov
bcpkix
jars。因此,让我们编写一个简短的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");
    }
}
import java.net.URL;
导入java.util.Enumeration;
公共类FindBouncy{
静态void printResources(字符串n)引发异常{
枚举e=FindBouncy.class.getClassLoader().getResources(n);
如果(!e.hasMoreElements()){
System.out.println(n+“未找到!”);
}否则{
System.out.println(n+“发现为:”);
而(e.hasMoreElements()){
System.out.println(“+e.nextElement());
}
}
}
公共静态void main(字符串argv[])引发异常{
printResources(“org/bouncycastle/openssl/PEMReader.class”);
printResources(“org/bouncycastle/asn1/ASN1InputStream.class”);
}
}

在eclipse中运行它,并找到“PEMReader”类(旧版本的bcpkix JAR中的旧类)和“ASN1InputStream”类(旧版本和新版本的bcprov JAR中的类)的来源。使用相互匹配的罐子版本。

Silvertunnel已经过时,您应该改用。SilverTunnel NG正在使用spongycastle,因此它也与Android兼容


您也可以在上找到SilverTunnel NG。

SilverTunnel已过时,您应该改用。SilverTunnel NG正在使用spongycastle,因此它也与Android兼容


您也可以在上找到SilverTunnel NG。

刚刚检查了它,没有以“bcprov”开头的文件。顺便说一句:我在eclipse中使用bouncy castle作为库。好的!我按照你说的做了,删除了所有不必要的版本,它不再抛出那个异常。但是现在我得到了以下异常:
javax.crypto.IllegalBlockSizeException:数据不能超过256字节
刚刚检查过它,没有以“bcprov”开头的文件。顺便说一句:我在eclipse中使用bouncy castle作为库。好的!我按照你说的做了,删除了所有不必要的版本,它不再抛出那个异常。但是现在我得到了以下异常:
javax.crypto.IllegalBlockSizeException:数据不能