Hai, pejuang kripto! Anda telah mempelajari alatan perdagangan, tetapi kini tiba masanya untuk menguasai seni menggunakannya. Mari kita mendalami amalan terbaik dan perangkap biasa menggunakan pakej crypto Go. Fikirkan ini sebagai perintah crypto anda - ikuti ini dan anda akan menuju ke pencerahan kriptografi!
Berpegang pada algoritma yang telah dicuba dan benar. Ia seperti memasak - gunakan resipi yang telah diuji masa!
// Good: Using the cryptographic equivalent of grandma's secret recipe import "crypto/aes" import "crypto/cipher" block, _ := aes.NewCipher(key) aesgcm, _ := cipher.NewGCM(block) ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
Layan kunci anda seperti permata mahkota - jananya dengan selamat, simpan dengan selamat dan putarkannya dengan kerap.
import "crypto/rand" // Generating a key fit for a king (or queen) key := make([]byte, 32) // 256-bit key _, err := rand.Read(key) if err != nil { panic("The royal key generator has failed us!") }
Mengenai crypto, crypto/rand ialah kawan baik anda. Ia seperti mempunyai die yang seimbang sempurna dengan satu bilion sisi.
import "crypto/rand" nonce := make([]byte, 12) if _, err := rand.Read(nonce); err != nil { panic("The universe has run out of randomness!") }
Sentiasa semak ralat, tetapi jadi misteri tentang butirannya. Ia seperti menjadi ejen rahsia - akui misi gagal, tetapi jangan dedahkan sebabnya.
ciphertext, err := aesgcm.Seal(nil, nonce, plaintext, nil) if err != nil { log.Printf("Mission failed: %v", err) return errors.New("the secret message could not be encoded") }
Gunakan halus.ConstantTimeCompare untuk perbandingan sensitif. Ia seperti mempunyai muka poker untuk kod anda.
import "crypto/subtle" if subtle.ConstantTimeCompare(receivedMAC, computedMAC) != 1 { return errors.New("the secret handshake was incorrect") }
Gunakan bcrypt atau Argon2 untuk pencincangan kata laluan. Ia seperti menggunakan mesin masa untuk membuat peretasan kata laluan mengambil masa berkurun lamanya.
import "golang.org/x/crypto/bcrypt" hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { panic("Our password blender is broken!") }
Sentiasa semak pasport digital tersebut (sijil). Ia seperti seorang bouncer yang sangat teliti di kelab crypto eksklusif.
config := &tls.Config{ RootCAs: certPool, VerifyPeerCertificate: func(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error { // Implement additional checks here return nil }, }
Menggunakan semula nonces adalah seperti menggunakan penyamaran yang sama dua kali sebagai ejen rahsia - ia meledakkan perlindungan anda!
// Bad: Reusing your disguise // nonce := make([]byte, 12) // ... use same nonce for multiple missions // Good: A fresh disguise for every mission nonce := make([]byte, 12) _, err := rand.Read(nonce)
Menggunakan mod ECB adalah seperti menggunakan sampul lutsinar untuk mesej rahsia anda.
// Bad: Using the see-through envelope (ECB mode) // This is just for illustration; Go doesn't even provide ECB mode directly // Good: Using the proper secret envelope (GCM mode) aesgcm, _ := cipher.NewGCM(block) ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
Penyulitan tanpa pengesahan adalah seperti menghantar surat tanpa meterai - sesiapa sahaja boleh mengusiknya!
// Bad: Sending unsealed letters // stream := cipher.NewCTR(block, iv) // stream.XORKeyStream(ciphertext, plaintext) // Good: Properly sealed secret messages aesgcm, _ := cipher.NewGCM(block) ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
Mengabaikan kesilapan adalah seperti mengabaikan lampu "Check Engine" pada kereta percutian anda.
// Bad: Ignoring the warning lights // plaintext, _ := aesgcm.Open(nil, nonce, ciphertext, nil) // Good: Paying attention to all the warning lights plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil) if err != nil { return nil, errors.New("our secret decoder ring has failed") }
Menggunakan algoritma yang lemah adalah seperti menggunakan kunci kertas pada peti besi rahsia anda.
// Good: Using the cryptographic equivalent of grandma's secret recipe import "crypto/aes" import "crypto/cipher" block, _ := aes.NewCipher(key) aesgcm, _ := cipher.NewGCM(block) ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
Menggunakan nilai "rawak" yang boleh diramal adalah seperti menggunakan "kata laluan123" sebagai kod rahsia anda.
import "crypto/rand" // Generating a key fit for a king (or queen) key := make([]byte, 32) // 256-bit key _, err := rand.Read(key) if err != nil { panic("The royal key generator has failed us!") }
Tidak mengemas kini perpustakaan crypto anda seperti menggunakan teknik penyulitan abad lalu untuk melindungi rahsia hari ini.
Ingat, crypto-padawan muda, menggunakan kuasa kriptografi adalah tanggungjawab yang besar. Ikut perintah ini, elakkan dosa ini, dan anda akan berada dalam perjalanan yang baik untuk menjadi ahli kripto sejati.
Tetapi sentiasa ingat - kriptografi adalah kompleks, malah pakar kadangkala mendapatkan nasihat. Apabila ragu-ragu, rujuk kepada penatua crypto (pakar keselamatan) atau bergantung pada teks suci (perpustakaan kriptografi peringkat tinggi yang mantap).
Sekarang pergi ke hadapan dan enkripsi, cincang dan tandatangani dengan yakin! Semoga crypto bersama anda!
Atas ialah kandungan terperinci Perintah Kripto: Amalan Terbaik dan Perangkap untuk Dielakkan, Pergi Kripto 10. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!