我有以下代码:
package main
import (
"crypto/md5"
"encoding/json"
"fmt"
)
type Payload struct {
HVIN []byte `json:"hvin"`
}
func main() {
vin := "1GBJC34R1VF063154"
md5 := md5.New()
md5Vin := md5.Sum([]byte(vin))
payload := &Payload{
HVIN: md5Vin,
}
b, _ := json.Marshal(payload)
fmt.Printf("%s", string(b))
}如果我在:https://play.golang.org/上运行代码,我会得到以下输出:
{"hvin":"MUdCSkMzNFIxVkYwNjMxNTTUHYzZjwCyBOmACZjs+EJ+"}我如何在Python3中复制它?
我尝试了以下几点:
import hashlib
result = hashlib.md5(b'1GBJC34R1VF063154')
print(result.hexdigest()) 正在获取与Go给出的输出不匹配的以下输出:
a40f771ea430ae32dbc5e818387549d3谢谢。
发布于 2019-11-14 05:12:41
另一个答案中的注释表明目标是匹配Go代码,即使Go代码不计算VIN的散列。
这是与Go代码匹配的python3代码。此代码base64对车载识别码和MD5初始值的连接进行编码。
vin := "1GBJC34R1VF063154"
b0 = vin.encode('utf-8')
b1 = hashlib.md5(b'').digest()
s = base64.b64encode(b0 + b1).decode('ascii') // to match Go's encoding/json
print(f'{{"hvin":"{s}"}}')Go代码的作者可能打算这样写:
vin := "1GBJC34R1VF063154"
md5Vin := md5.Sum([]byte(vin))
payload := &Payload{
HVIN: md5Vin[:],
}
b, _ := json.Marshal(payload)
fmt.Printf("%s", string(b))发布于 2019-11-13 23:55:39
您错误地使用了哈希:
vin := "1GBJC34R1VF063154"
md5 := md5.New()
md5.Write([]byte(vin))
md5Vin := md5.Sum(nil)
// This should give a40f771ea430ae32dbc5e818387549d3
fmt.Printf("%x",md5Vin)
payload := &Payload{
HVIN: md5Vin,
}
b, _ := json.Marshal(payload)
// This will print the base64-encoded version of the hash
fmt.Printf("%s", string(b)) 发布于 2019-11-14 15:47:46
您好,您只需遵循https://golang.org/pkg/crypto/md5/#example_New中的示例
戈朗
package main
import (
"crypto/md5"
"fmt"
"io"
)
func main() {
h := md5.New()
vin := "1GBJC34R1VF063154"
io.WriteString(h, vin)
fmt.Printf("%x", h.Sum(nil)) // a40f771ea430ae32dbc5e818387549d3
}Python
Python 3.6.8 (default, Oct 7 2019, 12:59:55)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import hashlib
>>>
>>> result = hashlib.md5(b'1GBJC34R1VF063154')
>>> print(result.hexdigest())
a40f771ea430ae32dbc5e818387549d3Golang在fmt中的%x打印"... base 16,a-f的小写字母“。更多信息:https://golang.org/pkg/fmt/
https://stackoverflow.com/questions/58840574
复制相似问题