Skip to content

Instantly share code, notes, and snippets.

@eberlitz
Last active September 28, 2016 13:40
Show Gist options
  • Save eberlitz/d8a3be7467fda5960eab7b69caaa82b9 to your computer and use it in GitHub Desktop.
Save eberlitz/d8a3be7467fda5960eab7b69caaa82b9 to your computer and use it in GitHub Desktop.
Simple example to generate A Shared Access Signature that can be used to share URL for file storage
var fileName = "sascontainer/sasblob.txt";
var startTime = "2015-04-29T22%3A18%3A26Z";
var expiracyTime = "2015-04-30T02%3A23%3A26Z";
var permissions = "rw";
var message = string.Format("{0},{1},{2},{3}", fileName, startTime, expiracyTime, permissions);
var messageBytes = Encoding.UTF8.GetBytes(message);
// Chave: Só o servidor conhece
byte[] secretkey = new Byte[64];
using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(secretkey);
}
// Assinatura
string signature;
using (HMACSHA256 hmac = new HMACSHA256(secretkey))
{
byte[] hashValue = hmac.ComputeHash(messageBytes);
signature = Convert.ToBase64String(hashValue);
}
// Validação
bool err = false;
using (HMACSHA256 hmac = new HMACSHA256(secretkey))
{
byte[] storedHash = Convert.FromBase64String(signature);
byte[] computedHash = hmac.ComputeHash(messageBytes);
for (int i = 0; i < storedHash.Length; i++)
{
if (computedHash[i] != storedHash[i])
{
err = true;
break;
}
}
if (err)
{
Console.WriteLine("Hash values differ! Signed file has been tampered with!");
}
else
{
Console.WriteLine("Hash values agree -- no tampering occurred.");
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment