Kaedah manakah yang digunakan dalam pustaka btcec Go untuk mengesahkan tandatangan secp256k1?

王林
Lepaskan: 2024-02-08 21:27:08
ke hadapan
456 orang telah melayarinya

Go 的 btcec 库中使用哪种方法来验证 secp256k1 签名?

Editor PHP Xiaoxin menggunakan algoritma ECDSA dalam perpustakaan btcec untuk mengesahkan tandatangan secp256k1. ECDSA (Elliptic Curve Digital Signature Algorithm) ialah algoritma tandatangan digital berdasarkan kriptografi lengkung eliptik, yang memastikan integriti dan ketulenan data dengan mengesahkan tandatangan. Dalam pustaka btcec, tandatangan disahkan dengan menggunakan parameter lengkung secp256k1 dan kunci awam untuk memastikan kesahihan tandatangan. Kaedah ini bukan sahaja memastikan keselamatan, tetapi juga mempunyai kecekapan dan prestasi yang tinggi.

Kandungan soalan

Saya menggunakan perpustakaan btcec untuk mengendalikan tandatangan secp256k1 dalam Go. Walau bagaimanapun, saya tidak menemui kaedah yang jelas untuk mengesahkan tandatangan dalam dokumen rasmi. btcec Terdapat pautan ke contoh "sahkan tandatangan" dalam dokumentasi, tetapi kod contoh itu nampaknya tidak diberikan secara langsung.

Saya ingin tahu, kaedah manakah dalam perpustakaan btcec yang digunakan untuk mengesahkan tandatangan secp256k1? Alangkah baiknya jika seseorang boleh memberikan contoh kod mudah. Terima kasih!

Penyelesaian

untuk anda ;-)

https://github.com/btcsuite/btcd /blob/master/btcec/ecdsa/example_test.go

// This example demonstrates verifying a secp256k1 signature against a public
// key that is first parsed from raw bytes.  The signature is also parsed from
// raw bytes.
func Example_verifySignature() {
    // Decode hex-encoded serialized public key.
    pubKeyBytes, err := hex.DecodeString("02a673638cb9587cb68ea08dbef685c" +
        "6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5")
    if err != nil {
        fmt.Println(err)
        return
    }
    pubKey, err := btcec.ParsePubKey(pubKeyBytes)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Decode hex-encoded serialized signature.
    sigBytes, err := hex.DecodeString("30450220090ebfb3690a0ff115bb1b38b" +
        "8b323a667b7653454f1bccb06d4bbdca42c2079022100ec95778b51e707" +
        "1cb1205f8bde9af6592fc978b0452dafe599481c46d6b2e479")

    if err != nil {
        fmt.Println(err)
        return
    }
    signature, err := ecdsa.ParseSignature(sigBytes)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Verify the signature for the message using the public key.
    message := "test message"
    messageHash := chainhash.DoubleHashB([]byte(message))
    verified := signature.Verify(messageHash, pubKey)
    fmt.Println("Signature Verified?", verified)

    // Output:
    // Signature Verified? true
}
Salin selepas log masuk

Atas ialah kandungan terperinci Kaedah manakah yang digunakan dalam pustaka btcec Go untuk mengesahkan tandatangan secp256k1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!