首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MD5散列转到Python

MD5散列转到Python
EN

Stack Overflow用户
提问于 2019-11-13 23:38:10
回答 3查看 504关注 0票数 2

我有以下代码:

代码语言:javascript
复制
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/上运行代码,我会得到以下输出:

代码语言:javascript
复制
{"hvin":"MUdCSkMzNFIxVkYwNjMxNTTUHYzZjwCyBOmACZjs+EJ+"}

我如何在Python3中复制它?

我尝试了以下几点:

代码语言:javascript
复制
import hashlib 

result = hashlib.md5(b'1GBJC34R1VF063154')
print(result.hexdigest()) 

正在获取与Go给出的输出不匹配的以下输出:

代码语言:javascript
复制
a40f771ea430ae32dbc5e818387549d3

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-14 05:12:41

另一个答案中的注释表明目标是匹配Go代码,即使Go代码不计算VIN的散列。

这是与Go代码匹配的python3代码。此代码base64对车载识别码和MD5初始值的连接进行编码。

代码语言:javascript
复制
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代码的作者可能打算这样写:

代码语言:javascript
复制
vin := "1GBJC34R1VF063154"
md5Vin := md5.Sum([]byte(vin))
payload := &Payload{
    HVIN: md5Vin[:],
}
b, _ := json.Marshal(payload)
fmt.Printf("%s", string(b))
票数 3
EN

Stack Overflow用户

发布于 2019-11-13 23:55:39

您错误地使用了哈希:

代码语言:javascript
复制
    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)) 
票数 2
EN

Stack Overflow用户

发布于 2019-11-14 15:47:46

您好,您只需遵循https://golang.org/pkg/crypto/md5/#example_New中的示例

戈朗

代码语言:javascript
复制
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

代码语言:javascript
复制
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()) 
a40f771ea430ae32dbc5e818387549d3

Golang在fmt中的%x打印"... base 16,a-f的小写字母“。更多信息:https://golang.org/pkg/fmt/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58840574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档