【问题标题】:checksum of a byte arrayGolang 字节数组 - 获取校验和
【发布时间】:2021-11-29 15:04:32
【问题描述】:

我有一个字节数组,由一个字符串组成:

    array := []byte("some string")

看起来像预期的那样:

    [115 111 109 101 32 115 116 114 105 110 103]

从 python 开始,我认为有更好的方法,而不是类似的方法:

    func sum(array []int) int {  
      result := 0  
      for _, v := range array {  
        result += v  
        }  
      return result  
    }

(以上失败,因为数字不是整数,所以这需要另一个数据转换)

有没有办法简单地获取字节数组的校验和?

喜欢:

    sum(array)

【问题讨论】:

  • 如果您想简单地将单个字节求和为整数,请执行以下操作:play.golang.org/p/kG_BomiGQ9v。还有hash/adler32hash/crc32hash/crc64
  • @mkopriva 谢谢!
  • 这里更大的目标是什么?示例字符串是简单的 ASCII 格式。 Go 字符串可以包含任何 UTF8 字符,因此单个符文可以跨越多个字节。
  • @colm.anseo 我将其用作 FIX 消息的校验和:en.wikipedia.org/wiki/…
  • @gg 编辑问题以说明您要计算 FIX 消息总和。这将省去人们编写无法解决您的问题的答案的麻烦。

标签: arrays go checksum


【解决方案1】:

也许您需要 md5.sum 来检查可靠性。

https://pkg.go.dev/crypto/md5#Sum

package main

import (
    "crypto/md5"
    "fmt"
)

func main() {
    data := []byte("some string")
    fmt.Printf("%x", md5.Sum(data))
}

另一个例子。

https://play.golang.org/p/7_ctunsqHS3

【讨论】:

    【解决方案2】:
    package main
    
    import (
        "crypto/md5"
        "encoding/hex"
        "fmt"
    )
    
    func GetMD5HashWithSum(text string) string {
        hash := md5.Sum([]byte(text))
        return hex.EncodeToString(hash[:])
    }
    
    func main() {
        hello := GetMD5HashWithSum("some string")
        fmt.Println(hello)
    }
    

    您可以在Golang Playground上获得它

    【讨论】:

      【解决方案3】:

      我认为尽可能避免使用fmt 进行转换是件好事:

      package main
      
      import (
         "crypto/md5"
         "encoding/hex"
      )
      
      func checksum(s string) string {
         b := md5.Sum([]byte(s))
         return hex.EncodeToString(b[:])
      }
      
      func main() {
         s := checksum("some string")
         println(s == "5ac749fbeec93607fc28d666be85e73a")
      }
      

      https://godocs.io/crypto/md5#Sum

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 2023-04-11
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多