BouncyCastle org.bouncycastle.crypto.tls.TlsUtils具有以下方法

protected static void checkVersion(InputStream inputstream, TlsProtocolHandler tlsprotocolhandler)
    throws IOException
{
    int i = inputstream.read();
    int j = inputstream.read();
    if (i != 3 || j != 1)
    {
        tlsprotocolhandler.failWithError((short)2, (short)70);
    }
}

protected static void checkVersion(byte abyte0[], TlsProtocolHandler tlsprotocolhandler)
    throws IOException
{
    if (abyte0[0] != 3 || abyte0[1] != 1)
    {
        tlsprotocolhandler.failWithError((short)2, (short)70);
    }
}


在这里检查3&1是什么?

最佳答案

这是被称为“幻数”的坏事的一个很好的例子:-)
摘录自InputStream.read()的javadoc:


  从输入流中读取下一个数据字节。值字节是
  以int形式返回,范围为0到255。如果没有可用的字节
  因为已到达流的末尾,所以值-1为
  回到。


这意味着ij是从流中读取的版本号。它们只需要是版本3和版本1。同样,failWithError方法也可以传递魔术数字。 TlsProtocolHandler具有常量,我不知道为什么作者不使用它们

2: AL_fatal
70: AP_protocol_version


source

在握手阶段(checkVersion)时将调用代码ServerHello。在此检查协议版本。请参阅此wikipedia article的版本章节以找到版本号。主要版本3,次要版本1是TLS 1.0

关于java - BouncyCaSTLe tlsutils checkVersion,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32264065/

10-10 15:57