· 9 years ago · Sep 14, 2016, 07:20 PM
1var fileName = "sascontainer/sasblob.txt";
2var startTime = "2015-04-29T22%3A18%3A26Z";
3var expiracyTime = "2015-04-30T02%3A23%3A26Z";
4var permissions = "rw";
5
6
7var message = string.Format("{0},{1},{2},{3}", fileName, startTime, expiracyTime, permissions);
8var messageBytes = Encoding.UTF8.GetBytes(message);
9
10// Chave: Só o servidor conhece
11byte[] secretkey = new Byte[64];
12using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
13{
14 rng.GetBytes(secretkey);
15}
16
17
18// Assinatura
19string signature;
20using (HMACSHA256 hmac = new HMACSHA256(secretkey))
21{
22 byte[] hashValue = hmac.ComputeHash(messageBytes);
23 signature = Convert.ToBase64String(hashValue);
24}
25
26// Validação
27bool err = false;
28using (HMACSHA256 hmac = new HMACSHA256(secretkey))
29{
30 byte[] storedHash = Convert.FromBase64String(signature);
31 byte[] computedHash = hmac.ComputeHash(messageBytes);
32
33 for (int i = 0; i < storedHash.Length; i++)
34 {
35 if (computedHash[i] != storedHash[i])
36 {
37 err = true;
38 break;
39 }
40 }
41 if (err)
42 {
43 Console.WriteLine("Hash values differ! Signed file has been tampered with!");
44 }
45 else
46 {
47 Console.WriteLine("Hash values agree -- no tampering occurred.");
48 }
49}