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条)

报告相同问题?

悬赏问题

  • ¥188 寻找能做王者评分提取的
  • ¥15 matlab用simulink求解一个二阶微分方程,要求截图
  • ¥30 乘子法解约束最优化问题的matlab代码文件,最好有matlab代码文件
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用