Cryptography C#HMACSHA1哈希不正确
我正试图解密一个文件。前2步: 将文件的前16个字节复制到缓冲区。这是文件的HMAC-SHA1散列,它是使用上面的一个键生成的 在该缓冲区上使用HMAC-SHA1和上面的密钥创建RC4密钥,即0x10字节 我的代码是: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,
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