2013-08-30 52 views
4

我有一个项目,我得到的URL到一个文件(例如www.documents.com/docName.txt),我想为该文件创建一个哈希。我怎样才能做到这一点。如何创建下载的文本文件SHA256哈希

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(); 

这是我必须创建一个散列的代码。但看到它如何使用文件流它使用存储在硬盘驱动器上的文件(例如c:/documents/docName.txt)但我需要它使用一个URL到文件而不是驱动器上的文件的路径。

+2

这听起来像你真的* *问你如何得到与URL相关联的内容...... –

+0

所以你的问题是如何从一个URL下载文件流,所以你可以散列吗?或者它是一个本地存储的文件,你需要解析它的本地路径? – Alex

+0

这是SharePoint 2013中的一个文件,我有一个应用程序将文档的URL从应用程序网站发送到主机网站,并在其中对其进行散列。 – Marijn

回答

4

要下载文件的使用:

string url = "http://www.documents.com/docName.txt"; 
string localPath = @"C://Local//docName.txt" 

using (WebClient client = new WebClient()) 
{ 
    client.DownloadFile(url, localPath); 
} 

然后读取该文件就像你有:

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(); 
+0

@glautrou阅读问题的主体。他想要下载一个文件然后对其进行哈希处理。 –

1

你可能想尝试这样的事情,虽然其他选择可能更取决于应用程序(以及已有的基础架构)实际上正在执行哈希。另外,我假设你实际上并不想下载和本地存储文件。

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)); 
     } 
    } 
}