1

下面是 Java 中 Keytab 实现的源代码。此代码段从 keytab 文件中读取密钥版本。我无法理解这是如何工作的。为什么要执行按位与和左移操作?

我的代码叫什么:

KeyTab keytab = KeyTab.getInstance(keytabFile); // passing keytab file location. 

此文件为二进制格式。KeyTabInputStream 读取数据。

  private void load(KeyTabInputStream var1) throws IOException, RealmException {
        this.entries.clear();
        **this.kt_vno = var1.readVersion();**
        if (this.kt_vno == 1281) {
            var1.setNativeByteOrder();
        }

        boolean var2 = false;

        while(var1.available() > 0) {
            int var4 = var1.readEntryLength();
            KeyTabEntry var3 = var1.readEntry(var4, this.kt_vno);
            if (DEBUG) {
                System.out.println(">>> KeyTab: load() entry length: " + var4 + "; type: " + (var3 != null ? var3.keyType : 0));
            }

            if (var3 != null) {
                this.entries.addElement(var3);
            }
        }

    }
    public int readVersion() throws IOException {
        int var1 = (this.read() & 255) << 8;
        return var1 | this.read() & 255;
    }
4

1 回答 1

1

this.read()大概返回 8 个“有趣”位,因为& 255“检索”仅最后 8 位,将其移动 8 位意味着现在 9-16 位保存数据。
然后再次执行另一个读取 +&再次获得 8 位,|通过前一步的移位位,您现在拥有一个int设置了 16 个相关位的位:位 1-8 保存第二次读取的结果,而位 9-16 保存位初读。

于 2019-05-15T18:23:38.553 回答