第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

預(yù)期的 MAC 不同于從 NodeJS 到 Go 服務(wù)器的傳入 MAC

預(yù)期的 MAC 不同于從 NodeJS 到 Go 服務(wù)器的傳入 MAC

Go
慕娘9325324 2022-08-01 15:25:24
我在嘗試在我的NodeJS和我的Go服務(wù)器之間實現(xiàn)HMAC時遇到問題。現(xiàn)在,從我的Go服務(wù)器生成的預(yù)期MAC與來自我的NodeJS服務(wù)器的實際MAC不同。// NodeJS generated MACconst generateMAC = (message, secret) => {  return crypto.createHmac('sha256', secret).update(message).digest('hex');};req.headers['blocklist-auth'] = generateMAC(  JSON.stringify(req.body),  secret);Go HMAC Validation(從 NodeJS 接收 MAC 并嘗試 tp 驗證)func generateMAC(message []byte, secret []byte) []byte {    mac := hmac.New(sha256.New, secret)    _, err := mac.Write(message)    if err != nil {        return nil    }    s := mac.Sum(nil)    return s}// ValidMAC reports whether messageMAC is a valid HMAC tag for message.func validMAC(message []byte, messageMAC []byte, secret []byte) bool {    expectedMAC := generateMAC(message, secret)    log.Infof("E: %s -- M: %s", string(expectedMAC), string(messageMAC), )    return hmac.Equal(messageMAC, expectedMAC)}調(diào)試后,我記錄了預(yù)期的MAC外觀和實際MAC的外觀預(yù)期:n\ufffd\ufffdmi\u0015\ufffd|\ufffdE\ufffd\ufffd>\ufffd\u000e0\u0012C1\ufffd\ufffd\ufffds?!\u001a|\ufffdH<!實際:55d31eb5caf5f5046d054fcf39721ba273cd97da66f663f8337e10ac62045197我注意到預(yù)期和實際MAC之間的長度也不同。來自NodeJS的長度是預(yù)期MAC的兩倍。不知道為什么會這樣。
查看完整描述

1 回答

?
MM們

TA貢獻(xiàn)1886條經(jīng)驗 獲得超2個贊

它們似乎產(chǎn)生相同的結(jié)果,但您在 Node 代碼中傳遞給摘要調(diào)用的編碼是 。如果在兩端以相同的方式對返回進(jìn)行編碼,則它們應(yīng)該匹配。'hex'


const crypto = require('crypto')

const generateMAC = (message, secret) =>

  crypto.createHmac('sha256', secret).update(message).digest('base64')

console.log(generateMAC('foo', 'bar'))

package main


import (

    "crypto/hmac"

    "crypto/sha256"

    "encoding/base64"

    "fmt"

)


func generateMAC(message []byte, secret []byte) string {

    mac := hmac.New(sha256.New, secret)

    _, err := mac.Write(message)

    if err != nil {

        return "oh no"

    }

    return base64.StdEncoding.EncodeToString(mac.Sum(nil))

}


func main() {

    fmt.Println(generateMAC([]byte("foo"), []byte("bar")))

}

這兩者都產(chǎn)生相同的輸出,因為它們都編碼為base64:。FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE=


.digest()如果未指定編碼,則默認(rèn)返回緩沖區(qū),然后也可以使用這些編碼之一在單獨(dú)的編碼中使用該緩沖區(qū)。.toString()


查看完整回答
反對 回復(fù) 2022-08-01
  • 1 回答
  • 0 關(guān)注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號