2013-10-03 67 views
3

我正在考虑在C#上创建一个程序以获取一系列非常大的文件的SHA1二进制base64哈希值。获取C#文件的SHA1二进制base64哈希值

现在我可以完成,通过对OpenSSL的运行指令:

OpenSSL的SHA1 - 二进制文件名| openssl base64

但是,我没有找到“二进制”和“base64”部分的参考,以获得与C#相同的结果。

可能吗?也许在C#中调用openssl?

谢谢。

回答

5

您需要使用Convert.ToBase64String方法和System.IO读取二进制:

string GetBase64EncodedSHA1Hash(string filename) 
{ 
    using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read)) 
    using (SHA1Managed sha1 = new SHA1Managed()) 
    { 
     return Convert.ToBase64String(sha1.ComputeHash(fs)); 
    } 
} 
+0

+1。你可以使用[File.ReadAllBytes](http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx)来简化它 - 少用using/streams。 –

+1

@AlexeiLevenkov问题显示他正在处理非常大的文件。将整个内容读入内存来做一个哈希可能是一个坏主意:) – Ashigore

+0

这工作!非常感谢!我只需要添加命名空间System.Security.Cryptography,但像魅力一样工作:D – user33177