“undefined:hmac.Equal”错误,而hmac.New在此行之前的工作正常

时间:2013-08-15 21:21:16

标签: go hmac

我正在开发一个web服务器,
在顶部,我有

import ("net/http"
    "log"
    "fmt"
    "encoding/json"
    "encoding/hex"
    "time"
    "math/rand"
    "crypto/sha256"
    "crypto/hmac"
    "strconv"
    "strings"
    "github.com/crowdmob/goamz/aws"
    "github.com/crowdmob/goamz/dynamodb"
)

以后我有

func singSomething(someid string) string {
mac := hmac.New(sha256.New, key)
    mac.Write([]byte(id))
    b := mac.Sum(nil)
return hex.EncodeToString(b)
}

func validateSignature(id, signature string) bool {
mac := hmac.New(sha256.New, key)
    mac.Write([]byte(id))
    expectedMAC := mac.Sum(nil)
    signatureMAC, err := hex.DecodeString(signature)
    if err != nil {
    fmt.Println("PROBLEM IN DECODING HUH!")
    return false
    }
return hmac.Equal(expectedMAC,signatureMAC)

}

发出go run CSServer时,我收到此错误  /CSServer.go:54: undefined: hmac.Equal

为什么呢?到底是怎么回事?为什么hmac.New没问题,但hmac.Equals不是?

2 个答案:

答案 0 :(得分:0)

请询问时发布最少但完整的程序。没有它,我唯一可以提供的是一个无故障编译的例子,即。未定义的hmac.Equal没有证明。在您未显示的代码中,其他地方一定存在一些问题。

package main

import (
        "crypto/hmac"
        "crypto/sha256"
        "encoding/hex"
        "fmt"
)

func singSomething(someid string) string {
        mac := hmac.New(sha256.New, []byte{})
        mac.Write([]byte(someid))
        b := mac.Sum(nil)
        return hex.EncodeToString(b)
}

func validateSignature(id, signature string) bool {
        mac := hmac.New(sha256.New, []byte{})
        mac.Write([]byte(id))
        expectedMAC := mac.Sum(nil)
        signatureMAC, err := hex.DecodeString(signature)
        if err != nil {
                fmt.Println("PROBLEM IN DECODING HUH!")
                return false
        }
        return hmac.Equal(expectedMAC, signatureMAC)
}

func main() {}

Playground

答案 1 :(得分:0)

不知道问题是什么,
但是在删除代码并将其放入play.golang.org之后,看到它工作正常,我的机器上没有发髻,我检查了我的版本,它是go1.0.3我安装了最新的{{1}并且问题解决了,非常奇怪。