亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

我無法按順序從她的私鑰生成 ECDSA 公鑰

我無法按順序從她的私鑰生成 ECDSA 公鑰

Go
慕虎7371278 2022-11-28 10:43:27
我無法按順序生成公鑰。輸出 :./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))            }       }   }
查看完整描述

4 回答

?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

非常感謝 Wesley 先生,我正在尋找的是這樣的東西, https://go.dev/play/p/ws2c_bIc4M5 但我無法按順序生成密鑰(私人和公共)謝謝你的好意



查看完整回答
反對 回復 2022-11-28
?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

非常感謝您的回復


我試過了 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:453


main.Public({0xc00001e1a0, 0x20})

        /root/Desktop/tuttogoprova/adressgoprova.go:17 +0x99

main.main()

        /root/Desktop/tuttogoprova/adressgoprova.go:37 +0xd3

exit status 2


查看完整回答
反對 回復 2022-11-28
?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

您定義PrivateKey為字節片:

PrivateKey := make([]byte, 32)

該函數Public被定義為將字符串作為其參數:

func Public(PrivateKey string) (publicKey string) {...}

因此Public(PrivateKey)無法工作,因為privateKey類型錯誤。

我不太確定代碼試圖做什么,但也許Public(string(PrivateKey))是你需要的?


查看完整回答
反對 回復 2022-11-28
?
holdtom

TA貢獻1805條經驗 獲得超10個贊

正如jochen 的回答所述,您需要先將PrivateKey字節切片轉換為字符串,然后再將其發送給Public函數。

一旦完成,就會發生指針取消引用錯誤,因為您為私有構建的字符串不是有效的bigint.

我通過復制count.String()PrivateKey而不是count.Bytes()

有關存儲密鑰對的更好方法,請參閱此答案。

這是一些演示所有這些的工作代碼。它確實需要cgo,因為原始代碼使用它,所以它不會在操場上運行。


查看完整回答
反對 回復 2022-11-28
  • 4 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號