dongqin1819 2017-07-27 10:18
浏览 227
已采纳

sha1的go与python和openssl的不同

I am trying to build a base64 encoded sha1 hash in go but the result i am getting is very different to the results of other programming languages

package main

import (
    "crypto/sha1"
    "encoding/base64"
    "fmt"
)

func main() {
    c := sha1.New()
  input := []byte("hello")
  myBytes := c.Sum(input)
  fmt.Println(base64.StdEncoding.EncodeToString(base64.StdPadding))
}

This Go Code prints out aGVsbG/aOaPuXmtLDTJVv++VYBiQr9gHCQ==

My Python Code Looks like this

import hashlib
import base64


print(base64.b64encode(hashlib.sha1('hello').digest()))

And outputs qvTGHdzF6KLavt4PO0gs2a6pQ00=

My bash command for comparison looks like this

echo -n hello| openssl dgst -sha1 -binary |base64

And outputs this qvTGHdzF6KLavt4PO0gs2a6pQ00=

Which lets me assume that the python code is doing everything correct. But why does go prints another result. Where is my mistake?

Thnx in advance

  • 写回答

2条回答 默认 最新

  • douqiao1997 2017-07-27 10:24
    关注

    There is an example of how to use it properly. You should do:

    c := sha1.New()
    io.WriteString(c, "hello")
    myBytes := c.Sum(nil)
    fmt.Println(base64.StdEncoding.EncodeToString(myBytes))
    

    https://play.golang.org/p/sELsWTcrdd

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?