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为
回到。
这意味着i
和j
是从流中读取的版本号。它们只需要是版本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/