如何获得字节数组中最左边的128位"?

时间:2015-04-20 21:06:18

标签: 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;
    }
    

1 个答案:

答案 0 :(得分:4)

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

hash.Take(16).ToArray();