Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara daftar masuk golang

Cara daftar masuk golang

PHPz
PHPzasal
2023-04-14 14:34:351592semak imbas

Dengan perkembangan teknologi Internet yang berterusan, bahasa Go, sebagai bahasa pengaturcaraan baharu, telah dialu-alukan oleh semakin ramai pembangun. Sebagai bahasa yang ditaip kuat, bahasa Go boleh memberikan sokongan yang lebih cekap, selamat dan stabil dalam pembangunan, dan telah digunakan secara meluas. Dalam bahasa Go, mekanisme tandatangan juga merupakan salah satu fungsi yang sangat penting. Seterusnya, mari kita lihat cara melaksanakan tandatangan dalam bahasa Go.

Pertama, kita perlu memahami beberapa konsep tandatangan.

Tandatangan yang dipanggil adalah untuk menyulitkan data dan menambah beberapa tanda khas pada data supaya pihak ketiga tidak boleh memalsukan data dan mengusik data. Tandatangan digital ialah salah satu bentuk kaedah tandatangan Prinsip terasnya ialah menggunakan teknologi penyulitan asimetri, iaitu, pasangan kunci yang terdiri daripada kunci persendirian dan kunci awam untuk tandatangan dan pengesahan.

Dalam bahasa Go, kita boleh menggunakan fungsi yang disediakan dalam pakej crypto untuk melaksanakan fungsi tandatangan digital. Langkah pelaksanaan khusus adalah seperti berikut:

  1. Jana pasangan kunci

Kita boleh menggunakan RSA untuk menjana pasangan kunci. Kodnya adalah seperti berikut:

package main

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/x509"
    "encoding/pem"
    "os"
)

func GenerateRsaKey() error {
    // 生成私钥
    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        return err
    }
    derPrivateKey := x509.MarshalPKCS1PrivateKey(privateKey)
    privateKeyBlock := &pem.Block{
        Type:  "RSA PRIVATE KEY",
        Bytes: derPrivateKey,
    }
    // 将私钥写入文件中
    privateKeyFile, err := os.Create("private.pem")
    if err != nil {
        return err
    }
    defer privateKeyFile.Close()
    pem.Encode(privateKeyFile, privateKeyBlock)

    // 生成公钥
    publicKey := privateKey.PublicKey
    derPublicKey, err := x509.MarshalPKIXPublicKey(&publicKey)
    if err != nil {
        return err
    }
    publicKeyBlock := &pem.Block{
        Type:  "PUBLIC KEY",
        Bytes: derPublicKey,
    }
    // 将公钥写入文件中
    publicKeyFile, err := os.Create("public.pem")
    if err != nil {
        return err
    }
    defer publicKeyFile.Close()
    pem.Encode(publicKeyFile, publicKeyBlock)

    return nil
}

Fungsi ini akan menjana pasangan kunci 2048-bit dan menulis kunci persendirian dan kunci awam masing-masing ke dalam fail private.pem dan public.pem.

  1. Tandatangan data

Kami boleh menggunakan kunci peribadi RSA untuk menandatangani data. Kod fungsi tandatangan adalah seperti berikut:

package main

import (
    "crypto"
    "crypto/rand"
    "crypto/rsa"
    "crypto/sha256"
    "encoding/hex"
)

func Sign(data []byte, privateKey *rsa.PrivateKey) (string, error) {
    h := sha256.New()
    h.Write(data)
    hash := h.Sum(nil)

    signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash)
    if err != nil {
        return "", err
    }

    return hex.EncodeToString(signature), nil
}

Fungsi ini menerima tatasusunan bait dan kunci peribadi sebagai parameter dan mengembalikan rentetan yang ditandatangani.

  1. Sahkan tandatangan

Kami boleh menggunakan kunci awam RSA untuk mengesahkan tandatangan. Kod fungsi pengesahan adalah seperti berikut:

package main

import (
    "crypto"
    "crypto/rsa"
    "crypto/sha256"
    "encoding/hex"
)

func Verify(signature string, data []byte, publicKey *rsa.PublicKey) bool {
    h := sha256.New()
    h.Write(data)
    hash := h.Sum(nil)

    decodedSignature, err := hex.DecodeString(signature)
    if err != nil {
        return false
    }

    err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hash, decodedSignature)
    if err != nil {
        return false
    }

    return true
}

Fungsi ini menerima rentetan tandatangan, tatasusunan bait data asal dan kunci awam sebagai parameter dan mengembalikan hasil pengesahan tandatangan.

Di atas ialah beberapa pengetahuan asas dan kod operasi tentang cara melaksanakan tandatangan digital dalam bahasa Go. Dalam aplikasi praktikal, mekanisme tandatangan digital boleh melindungi keselamatan dan kebolehpercayaan data dengan berkesan, meningkatkan kestabilan dan kredibiliti sistem aplikasi, dan memainkan peranan yang sangat penting dalam melindungi privasi pengguna dan memastikan integriti data.

Atas ialah kandungan terperinci Cara daftar masuk golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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