2013-02-04 48 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.