我如何获得 "left-most 128 bits of a byte array"?
How do I get the "left-most 128 bits of a byte array"?
所以我正在阅读 Open ID Connect 中描述的 JWT 令牌格式,其中一个字段 (at_hash) 表示它是从 oauth 访问生成的最左边的 128 位哈希令牌。所以我所做的是获取令牌,对其进行哈希处理,然后尝试将 "left-most" 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;
}
128 位是 16 个字节,所以你可以这样做:
hash.Take(16).ToArray();
所以我正在阅读 Open ID Connect 中描述的 JWT 令牌格式,其中一个字段 (at_hash) 表示它是从 oauth 访问生成的最左边的 128 位哈希令牌。所以我所做的是获取令牌,对其进行哈希处理,然后尝试将 "left-most" 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; }
128 位是 16 个字节,所以你可以这样做:
hash.Take(16).ToArray();