I have a project where I get the url to a file (e.g. www.documents.com/docName.txt) and I want to create a hash for that file. How can I do this.
FileStream filestream;
SHA256 mySHA256 = SHA256Managed.Create();
filestream = new FileStream(docUrl, FileMode.Open);
filestream.Position = 0;
byte[] hashValue = mySHA256.ComputeHash(filestream);
Label2.Text = BitConverter.ToString(hashValue).Replace("-", String.Empty);
filestream.Close();
This is the code i have to create a hash. But seeing how it uses filestream it uses files stored on the hard drive (e.g. c:/documents/docName.txt) But i need it to work with an url to a file and not the path to a file on the drive.
To download the file use:
string url = "http://www.documents.com/docName.txt";
string localPath = @"C://Local//docName.txt"
using (WebClient client = new WebClient())
{
client.DownloadFile(url, localPath);
}
then read the file like you have:
FileStream filestream;
SHA256 mySHA256 = SHA256Managed.Create();
filestream = new FileStream(localPath, FileMode.Open);
filestream.Position = 0;
byte[] hashValue = mySHA256.ComputeHash(filestream);
Label2.Text = BitConverter.ToString(hashValue).Replace("-", String.Empty);
filestream.Close();
You may want to try something like this, although other options may be better depending on the application (and the infrastructure already in place for it) that is actually performing the hashes. Also I am assuming you do not actually want to download and locally store the files.
public static class FileHasher
{
/// <summary>
/// Gets a files' contents from the given URI and calculates the SHA256 hash
/// </summary>
public static byte[] GetFileHash(Uri FileUri)
{
using (var Client = new WebClient())
{
return SHA256Managed.Create().ComputeHash(Client.OpenRead(FileUri));
}
}
}