2013-02-04 46 views
2

我想解密一个文件。前两个步骤:C#HMACSHA1哈希是不正确

将文件的前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 bytes.Where是我的错?

+0

aaaa,感谢:D它的工作原理:D – user1926930

回答

2

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

你只需要16(0x10)个,所以你需要截断。例如byte[] key = hmacSha1.ComputeHash(input).Take(16).ToArray()

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