Heim Backend-Entwicklung Golang Public-Key-Kryptographie: Der digitale Handschlag, Go Crypto 5

Public-Key-Kryptographie: Der digitale Handschlag, Go Crypto 5

Oct 29, 2024 am 09:08 AM

Public-Key Cryptography: The Digital Handshake, Go Crypto 5

Hallo, Krypto-Explorer! Sind Sie bereit, in die faszinierende Welt der Public-Key-Kryptographie einzutauchen? Betrachten Sie es als das digitale Äquivalent eines geheimen Händedrucks, den Sie in der Öffentlichkeit durchführen können. Klingt unmöglich? Lassen Sie uns es aufschlüsseln und sehen, wie Go uns dabei hilft, diesen kryptografischen Zaubertrick umzusetzen!

RSA: Der Urvater der Public-Key-Kryptowährung

Zuerst haben wir RSA (Rivest-Shamir-Adleman). Es ist wie der weise alte Großvater der Public-Key-Systeme – es gibt sie schon seit Ewigkeiten und sie sind immer noch erfolgreich.

RSA-Schlüsselgenerierung: Ihre digitale Identität

Beginnen wir mit der Erstellung unserer RSA-Schlüssel:

import (
    "crypto/rand"
    "crypto/rsa"
    "fmt"
)

func main() {
    // Let's make a 2048-bit key. It's like choosing a really long password!
    privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
    if err != nil {
        panic("Oops! Our key generator is feeling shy today.")
    }

    publicKey := &privateKey.PublicKey

    fmt.Println("Tada! We've got our keys. Keep the private one secret!")
    fmt.Printf("Private Key: %v\n", privateKey)
    fmt.Printf("Public Key: %v\n", publicKey)
}
Nach dem Login kopieren

RSA-Verschlüsselung und -Entschlüsselung: Weitergabe geheimer Notizen

Nun verwenden wir diese Tasten, um eine geheime Nachricht zu senden:

import (
    "crypto/rand"
    "crypto/rsa"
    "crypto/sha256"
    "fmt"
)

func main() {
    privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)
    publicKey := &privateKey.PublicKey

    secretMessage := []byte("RSA is like a magic envelope!")

    // Encryption - Sealing our magic envelope
    ciphertext, err := rsa.EncryptOAEP(
        sha256.New(),
        rand.Reader,
        publicKey,
        secretMessage,
        nil,
    )
    if err != nil {
        panic("Our magic envelope got stuck!")
    }

    fmt.Printf("Our secret message, encrypted: %x\n", ciphertext)

    // Decryption - Opening our magic envelope
    plaintext, err := rsa.DecryptOAEP(
        sha256.New(),
        rand.Reader,
        privateKey,
        ciphertext,
        nil,
    )
    if err != nil {
        panic("Uh-oh, we can't open our own envelope!")
    }

    fmt.Printf("Decrypted message: %s\n", plaintext)
}
Nach dem Login kopieren

RSA-Signatur und -Verifizierung: Ihre digitale Signatur

RSA ist nicht nur für geheime Nachrichten gedacht. Es können auch digitale Signaturen erstellt werden:

import (
    "crypto"
    "crypto/rand"
    "crypto/rsa"
    "crypto/sha256"
    "fmt"
)

func main() {
    privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)
    publicKey := &privateKey.PublicKey

    message := []byte("I solemnly swear that I am up to no good.")
    hash := sha256.Sum256(message)

    // Signing - Like signing a digital contract
    signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:])
    if err != nil {
        panic("Our digital pen ran out of ink!")
    }

    fmt.Printf("Our digital signature: %x\n", signature)

    // Verification - Checking if the signature is genuine
    err = rsa.VerifyPKCS1v15(publicKey, crypto.SHA256, hash[:], signature)
    if err != nil {
        fmt.Println("Uh-oh, this signature looks fishy!")
    } else {
        fmt.Println("Signature checks out. Mischief managed!")
    }
}
Nach dem Login kopieren

Elliptische Kurvenkryptographie (ECC): Der Neue auf dem Markt

Lassen Sie uns nun über ECC sprechen. Es ist wie der coolere, effizientere Cousin von RSA. Es bietet eine ähnliche Sicherheit mit kleineren Schlüsseln, was ideal für Mobil- und IoT-Geräte ist.

ECDSA-Schlüsselgenerierung: Ihre elliptische Identität

Lassen Sie uns unsere ECC-Schlüssel erstellen:

import (
    "crypto/ecdsa"
    "crypto/elliptic"
    "crypto/rand"
    "fmt"
)

func main() {
    privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    if err != nil {
        panic("Our elliptic curve generator took a wrong turn!")
    }

    publicKey := &privateKey.PublicKey

    fmt.Println("Voila! Our elliptic curve keys are ready.")
    fmt.Printf("Private Key: %v\n", privateKey)
    fmt.Printf("Public Key: %v\n", publicKey)
}
Nach dem Login kopieren

ECDSA-Signierung und -Verifizierung: Kurvige Signaturen

Jetzt unterschreiben wir etwas mit unseren Ellipsentasten:

import (
    "crypto/ecdsa"
    "crypto/elliptic"
    "crypto/rand"
    "crypto/sha256"
    "fmt"
)

func main() {
    privateKey, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
    publicKey := &privateKey.PublicKey

    message := []byte("Elliptic curves are mathematically delicious!")
    hash := sha256.Sum256(message)

    // Signing - Like signing with a very curvy pen
    r, s, err := ecdsa.Sign(rand.Reader, privateKey, hash[:])
    if err != nil {
        panic("Our curvy signature got a bit too curvy!")
    }

    fmt.Printf("Our elliptic signature: (r=%x, s=%x)\n", r, s)

    // Verification - Checking if our curvy signature is legit
    valid := ecdsa.Verify(publicKey, hash[:], r, s)
    fmt.Printf("Is our curvy signature valid? %v\n", valid)
}
Nach dem Login kopieren

Schlüsselverwaltung: Schützen Sie Ihre digitale Identität

Lassen Sie uns nun über die sichere Aufbewahrung dieser Schlüssel sprechen. Es ist, als hätte man einen wirklich wichtigen Schlüssel zu einer wirklich wichtigen Tür – man möchte ihn sicher aufbewahren!

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

func main() {
    privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)

    // Encoding our private key - Like putting it in a special envelope
    privateKeyBytes := x509.MarshalPKCS1PrivateKey(privateKey)
    privateKeyPEM := pem.EncodeToMemory(&pem.Block{
        Type:  "RSA PRIVATE KEY",
        Bytes: privateKeyBytes,
    })

    fmt.Printf("Our key in its special envelope:\n%s\n", privateKeyPEM)

    // Decoding our private key - Taking it out of the envelope
    block, _ := pem.Decode(privateKeyPEM)
    decodedPrivateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
    if err != nil {
        panic("We forgot how to open our own envelope!")
    }

    fmt.Printf("Our key, safe and sound: %v\n", decodedPrivateKey)
}
Nach dem Login kopieren

Die goldenen Regeln der Public-Key-Kryptographie

Da Sie nun mit diesen leistungsstarken Krypto-Tools arbeiten, sollten Sie die folgenden goldenen Regeln im Hinterkopf behalten:

  1. Auf die Größe kommt es an: Gehen Sie für RSA groß oder gehen Sie nach Hause – mindestens 2048 Bit. Für ECC sind 256 Bit der Sweet Spot.

  2. Zufall ist dein Freund: Verwenden Sie immer Krypto/Rand für die Schlüsselgenerierung. Die Verwendung schwacher Zufälligkeit ist wie die Verwendung von „password123“ als Schlüssel.

  3. Rotieren Sie Ihre Schlüssel: So wie Sie Ihre Passwörter ändern, wechseln Sie auch Ihre Schlüssel regelmäßig.

  4. Standardformate sind aus gutem Grund Standard: Verwenden Sie PEM zum Speichern und Senden von Schlüsseln. Es ist wie mit einem Standardumschlag – jeder weiß, wie man damit umgeht.

  5. Padding ist nicht nur für Möbel geeignet: Verwenden Sie für die RSA-Verschlüsselung immer OAEP-Padding. Es ist wie Luftpolsterfolie für Ihre verschlüsselten Daten.

  6. Hash vor dem Signieren: Signieren Sie beim Signieren großer Datenmengen den Hash, nicht die Daten selbst. Es ist schneller und genauso sicher.

  7. Leistung ist wichtig: Public-Key-Vorgänge können langsam sein, insbesondere RSA. Setzen Sie sie mit Bedacht ein.

Was kommt als nächstes?

Herzlichen Glückwunsch! Sie haben gerade die Public-Key-Kryptografie zu Ihrem Toolkit hinzugefügt. Diese Techniken eignen sich perfekt für sichere Kommunikation, digitale Signaturen und den Aufbau von Vertrauen im Wilden Westen des Internets.

Als nächstes werden wir uns eingehender mit digitalen Signaturen und ihren Anwendungen befassen. Es ist, als würde man lernen, seinen Namen auf eine Weise zu schreiben, die man nicht fälschen kann – ziemlich cool, oder?

Denken Sie daran, dass es in der Welt der Kryptographie von entscheidender Bedeutung ist, diese Grundlagen zu verstehen. Es ist, als würde man die Verkehrsregeln kennen lernen, bevor man losfährt. Wenn Sie diese beherrschen, sind Sie auf dem besten Weg, sichere, robuste Anwendungen in Go zu erstellen.

Wie wäre es also, wenn Sie versuchen würden, eine Nachricht für einen Freund mit seinem öffentlichen Schlüssel zu verschlüsseln? Oder vielleicht ein einfaches digitales Signatursystem implementieren? Die Welt der sicheren, authentifizierten Kommunikation steht Ihnen zur Verfügung! Viel Spaß beim Codieren, Krypto-Champion!

Das obige ist der detaillierte Inhalt vonPublic-Key-Kryptographie: Der digitale Handschlag, Go Crypto 5. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1671
14
PHP-Tutorial
1276
29
C#-Tutorial
1256
24
Golang gegen Python: Leistung und Skalierbarkeit Golang gegen Python: Leistung und Skalierbarkeit Apr 19, 2025 am 12:18 AM

Golang ist in Bezug auf Leistung und Skalierbarkeit besser als Python. 1) Golangs Kompilierungseigenschaften und effizientes Parallelitätsmodell machen es in hohen Parallelitätsszenarien gut ab. 2) Python wird als interpretierte Sprache langsam ausgeführt, kann aber die Leistung durch Tools wie Cython optimieren.

Golang und C: Parallelität gegen Rohgeschwindigkeit Golang und C: Parallelität gegen Rohgeschwindigkeit Apr 21, 2025 am 12:16 AM

Golang ist in Gleichzeitigkeit besser als C, während C bei Rohgeschwindigkeit besser als Golang ist. 1) Golang erreicht durch Goroutine und Kanal eine effiziente Parallelität, die zum Umgang mit einer großen Anzahl von gleichzeitigen Aufgaben geeignet ist. 2) C über Compiler -Optimierung und Standardbibliothek bietet es eine hohe Leistung in der Nähe der Hardware, die für Anwendungen geeignet ist, die eine extreme Optimierung erfordern.

Erste Schritte mit Go: Ein Anfängerführer Erste Schritte mit Go: Ein Anfängerführer Apr 26, 2025 am 12:21 AM

GoisidealforBeginersandSuitableforCloudandNetWorkServicesDuetoitsSimplicity, Effizienz und Konsumfeaturen.1) InstallgoFromTheofficialwebSiteAnDverifyWith'goversion'.2) CreateAneDrunyourFirstProgramwith'gorunhello.go.go.go.

Golang gegen C: Leistung und Geschwindigkeitsvergleich Golang gegen C: Leistung und Geschwindigkeitsvergleich Apr 21, 2025 am 12:13 AM

Golang ist für schnelle Entwicklung und gleichzeitige Szenarien geeignet, und C ist für Szenarien geeignet, in denen extreme Leistung und Kontrolle auf niedriger Ebene erforderlich sind. 1) Golang verbessert die Leistung durch Müllsammlung und Parallelitätsmechanismen und eignet sich für die Entwicklung von Webdiensten mit hoher Konsequenz. 2) C erreicht die endgültige Leistung durch das manuelle Speicherverwaltung und die Compiler -Optimierung und eignet sich für eingebettete Systementwicklung.

Golangs Auswirkungen: Geschwindigkeit, Effizienz und Einfachheit Golangs Auswirkungen: Geschwindigkeit, Effizienz und Einfachheit Apr 14, 2025 am 12:11 AM

GoimpactsDevelopmentPositivyThroughSpeed, Effizienz und DiasMlitication.1) Geschwindigkeit: Gocompilesquickandrunseffiction, idealforlargeProjects

Golang gegen Python: Schlüsselunterschiede und Ähnlichkeiten Golang gegen Python: Schlüsselunterschiede und Ähnlichkeiten Apr 17, 2025 am 12:15 AM

Golang und Python haben jeweils ihre eigenen Vorteile: Golang ist für hohe Leistung und gleichzeitige Programmierung geeignet, während Python für Datenwissenschaft und Webentwicklung geeignet ist. Golang ist bekannt für sein Parallelitätsmodell und seine effiziente Leistung, während Python für sein Ökosystem für die kurze Syntax und sein reiches Bibliothek bekannt ist.

Golang und C: Die Kompromisse bei der Leistung Golang und C: Die Kompromisse bei der Leistung Apr 17, 2025 am 12:18 AM

Die Leistungsunterschiede zwischen Golang und C spiegeln sich hauptsächlich in der Speicherverwaltung, der Kompilierungsoptimierung und der Laufzeiteffizienz wider. 1) Golangs Müllsammlung Mechanismus ist praktisch, kann jedoch die Leistung beeinflussen.

Das Performance -Rennen: Golang gegen C. Das Performance -Rennen: Golang gegen C. Apr 16, 2025 am 12:07 AM

Golang und C haben jeweils ihre eigenen Vorteile bei Leistungswettbewerben: 1) Golang ist für eine hohe Parallelität und schnelle Entwicklung geeignet, und 2) C bietet eine höhere Leistung und eine feinkörnige Kontrolle. Die Auswahl sollte auf Projektanforderungen und Teamtechnologie -Stack basieren.

See all articles