dsfg3241 2014-12-23 18:04
浏览 120
已采纳

crypto / sha1不匹配openssl命令

I'm trying to compute sha1, but the sha1 is not matching with the openssl command.

I compute the hash for an empty file like so on my Macbook :

$ touch test.txt
$ openssl sha1 -hex test.txt
SHA1(test.txt)= da39a3ee5e6b4b0d3255bfef95601890afd80709

And here is the simple test code I have :

package main

import "fmt"
import "crypto/sha1"

func main() {
        hash := sha1.New()
        hash.Write([]byte{0x00})
        fmt.Printf("Hash got %x, expected da39a3ee5e6b4b0d3255bfef95601890afd80709", hash.Sum(nil))
}

Here is the output as you see the output does not match, anyone know what I'm doing wrong?

Hash got 5ba93c9db0cff93f52b521d7420e43f6eda2784f, expected da39a3ee5e6b4b0d3255bfef95601890afd80709
  • 写回答

1条回答 默认 最新

  • drh96824 2014-12-23 18:22
    关注

    Your Go code is computing the SHA of an input of length 1, with a value of [ 0 ].

    The touch command actually creates an empty file (zero length), so the equivalent Go code would be:

    hash := sha1.New()
    // hash.Write([]byte{}) 
    data := hash.Sum(nil)
    fmt.Printf("hash: %x", data)
    

    The (commented) Write call above is a no-op. Playground

    Your test code does not actually seem to read from a file. Anyway, per your request, here is what a full sha utility would look like in Go:

    package main
    
    import (
            "crypto/sha1"
            "fmt"
            "io"
            "log"
            "os"
    )
    
    func main() {
            if len(os.Args) < 2 {
                    fmt.Printf("usage: %s <file>
    ", os.Args[0])
                    os.Exit(1)
            }
    
            file := os.Args[1]
    
            f, err := os.Open(file)
    
            if err != nil {
                    log.Fatal(err)
            }
    
            defer f.Close()
    
            hash := sha1.New()
    
            _, err = io.Copy(hash, f)
    
            if err != nil {
                    log.Fatal(err)
            }
    
            fmt.Printf("%x
    ", hash.Sum(nil))
    }
    

    Testing it out, I get:

    $ touch test.txt
    $ go run sha.go test.txt
    da39a3ee5e6b4b0d3255bfef95601890afd80709
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥50 我撰写的python爬虫爬不了 要爬的网址有反爬机制
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等