我无法按顺序从她的私钥生成 ECDSA 公钥

我无法按顺序生成公钥。


输出 :./keysgo.go:33:33: 不能使用 PrivateKey(类型 []byte)作为 Public 参数中的类型字符串


非常感谢你的帮助


保留这部分很重要:


func Public(PrivateKey string) (publicKey string) {

    var e ecdsa.PrivateKey

    e.D, _ = new(big.Int).SetString(PrivateKey, 16)

    e.PublicKey.Curve = secp256k1.S256()

    e.PublicKey.X, e.PublicKey.Y = e.PublicKey.Curve.ScalarBaseMult(e.D.Bytes())

    return fmt.Sprintf("%x", elliptic.MarshalCompressed(secp256k1.S256(), e.X, e.Y))

我试过了


package main 


import (

    "crypto/ecdsa"

    "crypto/elliptic"

    "fmt"

    "math/big"

    "github.com/ethereum/go-ethereum/crypto/secp256k1"

   

    

    

)

func Public(PrivateKey string) (publicKey string) {

    var e ecdsa.PrivateKey

    e.D, _ = new(big.Int).SetString(PrivateKey, 16)

    e.PublicKey.Curve = secp256k1.S256()

    e.PublicKey.X, e.PublicKey.Y = e.PublicKey.Curve.ScalarBaseMult(e.D.Bytes())

    return fmt.Sprintf("%x", elliptic.MarshalCompressed(secp256k1.S256(), e.X, e.Y))


}


func main() {

        count, one := big.NewInt(1), big.NewInt(1)

    count.SetString("9404625697166532776746648320380374280100293470930272690489102837043110636674",10)

        PrivateKey := make([]byte, 32)

   for {

        count.Add(count, one)

        copy(PrivateKey[32-len(count.Bytes()):], count.Bytes())

        

        fmt.Printf("%x\n",Public(PrivateKey))

        


    }   

    

}   

}


慕虎7371278
浏览 158回答 4
4回答

RISEBY

非常感谢 Wesley 先生,我正在寻找的是这样的东西, https://go.dev/play/p/ws2c_bIc4M5 但我无法按顺序生成密钥(私人和公共)谢谢你的好意

陪伴而非守候

非常感谢您的回复我试过了 Public(string(PrivateKey))程序的响应panic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x4b47f9]goroutine 1 [running]:math/big.(*Int).Bytes(...)        /usr/local/go/src/math/big/int.go:453main.Public({0xc00001e1a0, 0x20})        /root/Desktop/tuttogoprova/adressgoprova.go:17 +0x99main.main()        /root/Desktop/tuttogoprova/adressgoprova.go:37 +0xd3exit status 2

一只斗牛犬

您定义PrivateKey为字节片:PrivateKey := make([]byte, 32)该函数Public被定义为将字符串作为其参数:func Public(PrivateKey string) (publicKey string) {...}因此Public(PrivateKey)无法工作,因为privateKey类型错误。我不太确定代码试图做什么,但也许Public(string(PrivateKey))是你需要的?

holdtom

正如jochen 的回答所述,您需要先将PrivateKey字节切片转换为字符串,然后再将其发送给Public函数。一旦完成,就会发生指针取消引用错误,因为您为私有构建的字符串不是有效的bigint.我通过复制count.String()到PrivateKey而不是count.Bytes()有关存储密钥对的更好方法,请参阅此答案。这是一些演示所有这些的工作代码。它确实需要cgo,因为原始代码使用它,所以它不会在操场上运行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go