Cryptography C#HMACSHA1哈希不正确

Cryptography C#HMACSHA1哈希不正确,cryptography,Cryptography,我正试图解密一个文件。前2步: 将文件的前16个字节复制到缓冲区。这是文件的HMAC-SHA1散列,它是使用上面的一个键生成的 在该缓冲区上使用HMAC-SHA1和上面的密钥创建RC4密钥,即0x10字节 我的代码是: OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); BinaryReader binread = new BinaryReader(File.Open(ofd.FileName,

我正试图解密一个文件。前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个字节,但messagebox说它是20个字节。我的错误在哪里?

SHA-1,因此HMAC-SHA-1输出20个字节

您只需要16个(0x10),因此需要截断。例如,使用
byte[]key=hmacSha1.ComputeHash(输入).Take(16.ToArray()


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

aaaa,谢谢:D它可以工作:D