我正在开发一个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
不是?
答案 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() {}
答案 1 :(得分:0)
不知道问题是什么,
但是在删除代码并将其放入play.golang.org之后,看到它工作正常,我的机器上没有发髻,我检查了我的版本,它是go1.0.3
我安装了最新的{{1}并且问题解决了,非常奇怪。