簡體   English   中英

Node.js crypto-js MD5 和 Golang crypto/md5.Sum() 之間的不同哈希

[英]different hash between Node.js crypto-js MD5 and Golang crypto/md5.Sum()

crypto-js 的 MD5 函數( https://www.npmjs.com/package/crypto-js )如何處理對象? 我正在嘗試使用 crypto/md5 ( https://pkg.go.dev/crypto/md5 ) 包在 Golang 中復制哈希行為,但我無法弄清楚為什么我的兩個實現的哈希值不同。 這一定與 crypto-js 如何在內部處理對象有關,因為對於純字符串,我得到了相同的哈希值。

Node.js 示例:

var CryptoJS = require("crypto-js");
let body = {"key":"value"}
let bodyHash =  CryptoJS.MD5(body);
CryptoJS.enc.Base64.stringify(hash)

輸出哈希:SH97IvaDEtLBu8k7GupEWw==

Golang 示例:

import (
    "crypto/md5"
    "encoding/base64"
)

type KeyValue struct {
    Key string  `json:"key"`
}

func main() {
    body := KeyValue{
        Key: "value",
    }
    bodyByteArray, _ := json.Marshal(body)
    bodyHash := md5.Sum(bodyByteArray)
    bodyHashBase64 := base64.StdEncoding.EncodeToString(bodyHash)
}

輸出哈希:pzU/fN3OgI3gAydHoLe+UA==

任何幫助和解釋表示贊賞!

您在對象上使用 md5 而不是字符串(您正在散列不同的東西)

var CryptoJS = require("crypto-js");
let body = {"key":"value"}
let bodyHash =  CryptoJS.MD5(JSON.stringify(body)); <<<<<<<<<
CryptoJS.enc.Base64.stringify(hash)

哈希: pzU/fN3OgI3gAydHoLe+UA==

對於 golang

package main

import (
    "crypto/md5"
    "encoding/base64"
    "encoding/json"
    "fmt"
)

type KeyValue struct {
    Key string `json:"key"`
}

func main() {
    body := KeyValue{
        Key: "value",
    }
    bodyByteArray, _ := json.Marshal(body)
    fmt.Println(string(bodyByteArray))
    digest := md5.New()
    digest.Write(bodyByteArray)
    bodyHash := digest.Sum(nil)
    bodyHashBase64 := base64.StdEncoding.EncodeToString(bodyHash)
    fmt.Println(bodyHashBase64)
}

哈希: pzU/fN3OgI3gAydHoLe+UA==

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM