【问题标题】:Get SHA1 binary base64 hash of a file on C#在 C# 上获取文件的 SHA1 二进制 base64 哈希
【发布时间】:2013-10-03 03:56:11
【问题描述】:

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

现在我可以通过在 OpenSSL 上运行这条指令来实现:

openssl sha1 -二进制文件名 | openssl base64

但是我还没有找到“二进制”和“base64”部分的引用来获得与 C# 相同的结果。

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

谢谢。

【问题讨论】:

    标签: c# hash binary openssl base64


    【解决方案1】:

    您需要使用 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));
        }
    }
    

    【讨论】:

    • +1。你可以使用File.ReadAllBytes 让它变得更简单 - 更少使用/streams。
    • @AlexeiLevenkov 问题表明他正在处理非常大的文件。将整个内容读入内存以生成哈希可能是个坏主意:)
    • 成功了!多谢!我只需要添加命名空间 System.Security.Cryptography,但就像一个魅力:D
    【解决方案2】:

    最简单的方法是 Get-FileHash,它自 PS 4.0 起就可用

    $ echo "Hello world" >1.tm
    $
    $ Get-FileHash 1.tm
    
    Algorithm       Hash                                                                   
    Path
    ---------       ----                                                                   ----
    SHA256          B995A2FAFFB3F27C632CE037BDB2ADB04EC3E578D0FA794BA50CFC16F0F219BF       
    C:\scratch\1.tm
    
    
    $
    

    【讨论】:

      猜你喜欢
      • 2015-06-07
      • 2015-05-29
      • 1970-01-01
      • 2018-08-03
      • 2016-10-12
      • 1970-01-01
      • 2011-05-18
      • 2021-11-23
      • 2020-01-12
      相关资源
      最近更新 更多