如何获取“字节数组最左边的 128 位”?

Sin*_*tic 2 c# cryptography openid-connect

因此,我正在阅读 Open ID Connect 中描述的 JWT 令牌格式,其中一个字段 (at_hash) 表示它是由 oauth 访问令牌生成的最左边的 128 位哈希值。所以我所做的就是获取令牌,对其进行哈希处理,然后尝试提取“最左边”的 128 位,但我觉得我做的这一切都是错误的;感觉很笨拙。

所以我想我的问题是:

  • 这甚至是正确的吗?
  • 有没有更好、更准确的方法来做到这一点?

    private byte[] GetFirst128(byte[] hash)
    {
        var bitArray = new BitArray(hash);
        var left128 = new List<bool>();
        for (var i = 0; i < 128; i++)
        {
            left128.Add(bitArray[i]);
        }
    
        // convert back to byte[]
        var r = Array.ConvertAll(left128.ToArray(),
            bit => bit
                ? (byte) 1
                : (byte) 0);
    
        return r;
    }
    
    Run Code Online (Sandbox Code Playgroud)

Jon*_*jan 5

128 位是 16 个字节,所以你可以这样做:

hash.Take(16).ToArray();
Run Code Online (Sandbox Code Playgroud)