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号吗?
发布于 2015-08-28 05:54:54
这是一个很好的例子,一个叫做“魔术数字”的坏东西:-)摘录自InputStream.read()的javadoc
从输入流读取下一个字节的数据。在0到255范围内,值字节作为int返回。如果由于到达流的末尾而没有可用的字节,则返回值-1。
这意味着i和j是从流中读取的版本号。它们只需是版本3和版本1。另外,failWithError方法也会传递神奇的数字。TlsProtocolHandler对它们有常量,我不知道为什么作者不使用它们
2: AL_fatal
70: AP_protocol_version来源
查看代码checkVersion是在握手阶段(ServerHello)时调用的。这里检查协议版本。请参阅此维基百科文章的版本一章,以查找版本号。主要版本3,次要版本1是TLS 1.0。
https://stackoverflow.com/questions/32264065
复制相似问题