C# 将整数八位字节添加到字节数组

C# 将整数八位字节添加到字节数组,c#,arrays,integer,byte,rfc,C#,Arrays,Integer,Byte,Rfc,我正在尝试实现Salted质询-响应身份验证机制(),但遇到了一些问题 Hi(str, salt, i): U1 := HMAC(str, salt + INT(1)) U2 := HMAC(str, U1) ... Ui-1 := HMAC(str, Ui-2) Ui := HMAC(str, Ui-1) Hi := U1 XOR U2 XOR ... XOR Ui where "i" is the iteration count, "+" is the string con

我正在尝试实现Salted质询-响应身份验证机制(),但遇到了一些问题

Hi(str, salt, i):

U1   := HMAC(str, salt + INT(1))
U2   := HMAC(str, U1)
...
Ui-1 := HMAC(str, Ui-2)
Ui   := HMAC(str, Ui-1)

Hi := U1 XOR U2 XOR ... XOR Ui

where "i" is the iteration count, "+" is the string concatenation
operator, and INT(g) is a 4-octet encoding of the integer g, most
significant octet first.

我不确定如何添加INT(1)。我有一个用于salt的字节数组。我需要做的就是对1进行位移位并将其添加到数组的末尾?

不能向数组添加任何内容。由于数组的大小是固定的,因此需要为结果创建一个新数组。使用
位转换器
类获取整数的二进制表示形式:

// create new array
byte[] key = new byte[salt.Length + 4];
// copy salt
Array.Copy(salt, key, salt.Length);
// create array from integer
byte[] g = BitConverter.GetBytes(1);
if (BitConverter.IsLittleEndian) {
  Array.Reverse(g);
}
// copy integer array
Array.Copy(g, 0, key, salt.Length, 4);

谢谢我应该考虑把它作为一个链接。在我看来,它只是一个二进制序列
00,00,00,01
。这是整数1的4个八位编码,首先是最重要的八位。谢谢。有一种更简单的方法,但这很管用。@Coder2000:是的,还有其他方法可以用同样的方法,例如使用扩展方法合并数组中的数据并将其转换为新数组。我在array.Copy(新字节[]{0,0,0,1},0,salt.Length,4)的思路上考虑得更多@Coder2000:您甚至可以利用这样一个事实,即数组在创建时是零填充的,因此您不必复制零字节。您只需按
键[salt.Length+3]++:)