2

我正在尝试解密文件。前 2 个步骤:

将文件的前 16 个字节复制到缓冲区。这是使用上述密钥之一制作的文件的 HMAC-SHA1 哈希。

在该缓冲区上使用 HMAC-SHA1 和上面的密钥来创建 RC4 密钥,即 0x10 字节。

我的代码是:

OpenFileDialog ofd = new OpenFileDialog();
        ofd.ShowDialog();
        BinaryReader binread = new BinaryReader(File.Open(ofd.FileName, FileMode.Open));
        byte[] RetailKey = { 0xE1, 0xBC, 0x15, 0x9C, 0x73, 0xB1, 0xEA, 0xE9, 0xAB, 0x31, 0x70, 0xF3, 0xAD, 0x47, 0xEB, 0xF3 };
        HMACSHA1 SHA = new HMACSHA1(RetailKey); //Initalize HMAC w/ retail or development key
        byte[] buffer = binread.ReadBytes(16);
        buffer = SHA.ComputeHash(buffer);
        MessageBox.Show(buffer.Length.ToString());    

如您所见,它说缓冲区必须是 10 个字节,但消息框说它是 20 个字节。我的错误在哪里?

4

1 回答 1

2

SHA-1 和 HMAC-SHA-1 输出 20 个字节。

您只需要其中的 16 个(0x10),因此您需要截断。例如与byte[] key = hmacSha1.ComputeHash(input).Take(16).ToArray().

0xin是一个前缀,表示 c(和派生语言)中的0x10十六进制数字。所以0x10意味着 16 而不是 10。

于 2013-02-04T11:18:49.310 回答