任何人都可以建议一种修改以下代码的方法,以便我可以使用我包含的常量公钥吗?我无法更改它并使其以常量工作。
package main
import (
"golang.org/x/crypto/nacl/sign"
"crypto/rand"
"log"
"encoding/base64"
"encoding/json"
"io/ioutil"
"net/http"
"github.com/gin-gonic/gin"
// "os"
// "strings"
)
type authtoken struct {
Cookie string `json:"cookie"`
}
type user struct {
Username string `json:"username"`
Password string `json:"password"`
}
var users []user
var pubkey *[64]byte
var privkey *[32]byte
const pubkeyStr = "123eRhvE0bqx81t3G9o79LOkkR4CK9Cyhvt8-QJ-s1H2A6uSwukUI0CYUlc3WbmIAa3VTo4Jm9RF5F0Af4DzmQ"
func login(c *gin.Context) {
var tryUser user
if err := c.BindJSON(&tryUser); err != nil {
return
}
for _, user := range users {
if user == tryUser {
// Convert the constant public key string to bytes
pubkey := []byte(pubkeyStr)
//token = authtoken{Username: user.Username}
//out := make([]byte, 300)
out := make([]byte,0)
log.Println("username", []byte(user.Username), "pubkey",pubkey)
signedtokenout := sign.Sign(out, []byte(user.Username), pubkey)
log.Println("signed token:",signedtokenout)
signedtokenstr := base64.RawURLEncoding.EncodeToString(signedtokenout[:])
c.IndentedJSON(http.StatusOK, gin.H{"cookie":signedtokenstr})
c.IndentedJSON(http.StatusOK, gin.H{"my pubkey is":base64.RawURLEncoding.EncodeToString(pubkey[:])})
return
}
}
c.IndentedJSON(http.StatusForbidden, "wrong")
}
func home(c *gin.Context) {
c.IndentedJSON(http.StatusOK, gin.H{"my pubkey is":base64.RawURLEncoding.EncodeToString(pubkey[:])})
}
func main() {
bytes, err := ioutil.ReadFile("users.json")
if err != nil {
log.Println("Unable to load users file!")
return
}
err = json.Unmarshal(bytes, &users)
if err != nil {
log.Println("Unable to unmarshal users file!")
return
}
privkey,pubkey, _ = sign.GenerateKey(rand.Reader)
// if err != nil {
// log.Fatal("could not GenerateKey", err)
// }
log.Printf("\n\nThe public key is:%v\n\nThe private key is:%v\n", pubkey,privkey)
pubstr := base64.RawURLEncoding.EncodeToString(pubkey[:])
log.Println("\nThe encoded public key:", pubstr)
router := gin.Default()
router.POST("/login", login)
router.GET("/", home)
router.Run("0.0.0.0:80")
}
我希望能够在整个代码中用常量 pubkey 替换“var pubkey *[64]byte”。目前,运行它时,它会在主函数中生成当前预期的随机密钥,但不是我需要的。 我知道“类型”不正确,但我不知道如何修改它。
如有任何帮助,我们将不胜感激。
我希望能够在整个代码中用常量 pubkey 替换
。var pubkey *[64]byte
我认为你不能完全做到这一点,但你可以在
init
中初始化一个全局变量:
var pubkey *[64]byte
const pubkeyStr = "123eRhvE0bqx81t3G9o79LOkkR4CK9Cyhvt8-QJ-s1H2A6uSwukUI0CYUlc3WbmIAa3VTo4Jm9RF5F0Af4DzmQ"
func init() {
pubkey = &[64]byte{}
copy(pubkey[:], pubkeyStr)
}
这样,您就可以在包中的任何其他位置引用
pubkey
,它将具有预期的值。