Hai, penjelajah kripto! Bersedia untuk mengotorkan tangan anda dengan beberapa primitif kriptografi Go? Anggap ini sebagai blok LEGO dunia crypto - kepingan mudah yang, apabila disatukan dengan bijak, boleh membina ciri keselamatan yang menakjubkan. Jom terjun!
Pertama sekali, kami mempunyai fungsi cincang. Ini adalah seperti mesin-mesin yang mencantumkan sen ke dalam bentuk bujur di tempat-tempat tarikan pelancong. Tidak kira apa yang anda masukkan, anda sentiasa mendapat output saiz tetap. Tetapi tidak seperti mesin penny tersebut, fungsi cincang yang baik menghasilkan "cap jari" yang unik untuk setiap input.
Pakej kripto Go memberi kami beberapa perisa fungsi cincang:
1.SHA-256 dan SHA-224: Kuda kerja dunia crypto. Begini cara anda menggunakan SHA-256:
import "crypto/sha256" data := []byte("Go crypto rocks!") hash := sha256.Sum256(data) fmt.Printf("%x\n", hash)
2.SHA-512 dan rakan: Apabila anda memerlukan keselamatan tambahan (atau sama seperti nombor besar):
import "crypto/sha512" data := []byte("Go crypto rocks even harder!") hash := sha512.Sum512(data) fmt.Printf("%x\n", hash)
3.SHA-3: Kanak-kanak baharu di blok, tahan terhadap beberapa serangan teori pada SHA-2:
import "golang.org/x/crypto/sha3" data := []byte("Go crypto rocks in the future!") hash := sha3.Sum256(data) fmt.Printf("%x\n", hash)
Kini, anda mungkin melihat MD5 dan SHA-1 mengintai. Ia seperti telefon selak lama dalam laci anda - ia masih berfungsi, tetapi anda tidak mahu bergantung padanya untuk perkara penting hari ini.
Seterusnya, kami mempunyai MAC. Fikirkan ini sebagai meterai lilin pada surat zaman pertengahan. Mereka tidak merahsiakan kandungannya, tetapi mereka membuktikan siapa yang menghantar mesej itu dan ia tidak diusik.
import ( "crypto/hmac" "crypto/sha256" ) key := []byte("super-secret-key") message := []byte("The eagle has landed") mac := hmac.New(sha256.New, key) mac.Write(message) signature := mac.Sum(nil) fmt.Printf("%x\n", signature)
import ( "crypto/aes" "golang.org/x/crypto/cmac" ) key := []byte("16-byte-long-key") message := []byte("Shaken, not stirred") cipher, _ := aes.NewCipher(key) mac, _ := cmac.New(cipher) mac.Write(message) signature := mac.Sum(nil) fmt.Printf("%x\n", signature)
Terakhir tetapi pasti tidak kurang, kami mempunyai penjanaan nombor rawak. Ini seperti mempunyai die yang sempurna dan tidak berat sebelah dengan berbilion-bilion sisi. Ini penting untuk menjana kunci, nonces dan di mana-mana sahaja anda memerlukan ketidakpastian.
Go memberi kami crypto/rand untuk ini:
import ( "crypto/rand" "encoding/binary" ) // Roll a 32-bit die var number int32 binary.Read(rand.Reader, binary.BigEndian, &number) fmt.Println("Random number:", number) // Generate 16 random bytes bytes := make([]byte, 16) _, err := rand.Read(bytes) if err != nil { panic("Oops, the universe broke!") } fmt.Printf("Random bytes: %x\n", bytes)
Ingat, sentiasa gunakan crypto/rand, bukan matematik/rand. Menggunakan matematik/rand untuk crypto adalah seperti menggunakan peti besi mainan untuk menyimpan barang berharga anda!
Sekarang anda mempunyai alatan baharu yang berkilat ini, berikut ialah beberapa peraturan emas yang perlu diingat:
Berpegang pada perkara yang kukuh: Untuk pencincangan, SHA-256 atau lebih baik. Ia seperti memilih kunci yang baik - lakukan yang terbaik yang anda mampu.
Rahsiakan rahsia anda: Kunci MAC adalah seperti kunci rumah anda. Jangan biarkan mereka berbaring!
Sampah masuk, sampah keluar: Apabila menjana kunci atau bahan rahsia lain, gunakan input rawak berkualiti tinggi. Hari lahir atau "kata laluan123" tidak dibenarkan!
Semak kerja anda: Sentiasa semak dan tangani ralat, terutamanya dengan penjanaan nombor rawak. Ia seperti menyemak semula bahawa anda telah mengunci pintu.
Ketahui had anda: Berhati-hati dengan implikasi prestasi. Operasi kripto boleh menjadi berat, terutamanya pada data besar atau dalam senario trafik tinggi. Profilkan kod anda!
Tahniah! Anda baru sahaja menambahkan beberapa alat yang berkuasa pada tali pinggang alat crypto anda. Primitif ini adalah asas kepada semua perkara lain yang akan kami lakukan dalam kriptografi.
Dalam bahagian seterusnya, kita akan melihat bagaimana blok binaan ini disatukan untuk mencipta operasi kriptografi yang lebih kompleks. Kami akan menyelami penyulitan (merahsiakan rahsia) dan tandatangan digital (membuktikan siapa yang menulis apa).
Ingat, dalam dunia kriptografi, memahami asas ini adalah penting. Ia seperti belajar berjalan sebelum anda berlari - kuasai ini dan anda akan membina keselamatan peringkat Fort Knox ke dalam aplikasi Go anda dalam masa yang singkat!
Jadi, bagaimana kalau kita menggunakan alatan baharu ini untuk berputar? Cuba cincang nama anda atau jana beberapa nombor rawak. Bermain-main, bereksperimen, dan yang paling penting, berseronok! Lagipun, kriptografi hanyalah matematik mewah, dan matematik boleh menjadi sangat menarik apabila anda menggunakannya untuk melindungi rahsia digital. Selamat pengekodan, juara crypto!
Atas ialah kandungan terperinci Blok Bangunan Kriptografi: LEGO Keselamatan, Go Crypto 3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!