Dengan perkembangan pesat Internet, isu keselamatan maklumat telah menarik lebih banyak perhatian. Antaranya, keselamatan data dalam pangkalan data adalah amat penting. Oleh itu, dalam aplikasi praktikal, sangat perlu untuk menyulitkan data dalam pangkalan data. Artikel ini memperkenalkan proses storan yang disulitkan berdasarkan golang untuk memastikan keselamatan data.
1. Algoritma penyulitan Golang
Golang menyediakan pelbagai algoritma penyulitan. Algoritma penyulitan biasa terutamanya termasuk md5, sha, AES, dsb., yang perlu dipilih mengikut keperluan dalam aplikasi sebenar. Berikut adalah algoritma penyulitan golang biasa.
md5 ialah salah satu algoritma ringkasan yang paling biasa Kerana kodnya tidak boleh diubah, ia sering digunakan untuk penyimpanan kata laluan. Algoritma ini boleh mencerna mesej dari sebarang panjang ke dalam data panjang 128-bit, biasanya diwakili sebagai rentetan heksadesimal.
Pakej md5 disediakan dalam golang, yang boleh digunakan melalui kod berikut:
import ( "crypto/md5" "fmt" ) func main() { str:="hello,world" h:=md5.Sum([]byte(str)) fmt.Printf("%x",h) }
sha ialah sejenis selamat algoritma cincang , yang biasa digunakan dalam piawaian tandatangan digital. Sama seperti md5, terdapat banyak variasi sha, yang mana sha256 adalah yang paling biasa. Ia boleh mencerna mesej dalam apa-apa panjang ke dalam maklumat panjang 256-bit, sambil mencapai tujuan untuk menentang serangan perlanggaran kekerasan.
Pakej sha256 disediakan dalam golang, yang boleh digunakan melalui kod berikut:
import ( "crypto/sha256" "fmt" ) func main() { str:="hello,world" h:=sha256.Sum256([]byte(str)) fmt.Printf("%x",h) }
AES ialah standard penyulitan lanjutan Algoritma penyulitan simetri. Ia menukar teks biasa dengan panjang tertentu kepada teks sifir dengan panjang tertentu melalui algoritma Melalui algoritma yang sama, teks sifir boleh dipulihkan kepada teks biasa. Dalam aplikasi, menyimpan data sensitif dengan penyulitan AES boleh meningkatkan keselamatan data dengan ketara.
Pakej crypto/aes disediakan dalam golang, yang boleh digunakan melalui kod berikut:
import ( "crypto/aes" "crypto/cipher" "fmt" ) func main() { key:=[]byte("mykey1234567890") plaintext:=[]byte("hello,world") block,_:=aes.NewCipher(key) ciphertext:=make([]byte,len(plaintext)) iv:=[]byte("1234567890123456") stream:=cipher.NewCTR(block,iv) stream.XORKeyStream(ciphertext,plaintext) fmt.Printf("%x ",ciphertext) }
2. Proses storan disulitkan Golang
Dalam aplikasi sebenar, data dalam pangkalan data tidak sesuai Teks biasa disimpan secara langsung Untuk mengelakkan kebocoran maklumat sensitif, ia biasanya disimpan secara disulitkan. Berikut ialah prosedur tersimpan yang disulitkan berdasarkan golang:
import ( "crypto/aes" "crypto/cipher" "crypto/md5" "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" )
func getMd5(value string) string { m := md5.New() m.Write([]byte(value)) return hex.EncodeToString(m.Sum(nil)) }
func encrypt(str, key string) string { k := []byte(key) plaintext := []byte(str) block, _ := aes.NewCipher(k) ciphertext := make([]byte,len(plaintext)) iv := []byte("1234567890123456") stream := cipher.NewCTR(block, iv) stream.XORKeyStream(ciphertext, plaintext) return string(ciphertext) }
func decrypt(str, key string) string { k := []byte(key) ciphertext := []byte(str) block, _ := aes.NewCipher(k) plaintext := make([]byte,len(ciphertext)) iv := []byte("1234567890123456") stream := cipher.NewCTR(block, iv) stream.XORKeyStream(plaintext, ciphertext) return string(plaintext) }
func saveData(name, password, key string) error { // 打开数据库 db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test") if err != nil { return err } defer db.Close() // 定义插入SQL语句 sql := "INSERT INTO user(name, password) VALUES(?, ?)" // 对密码进行加密存储 pwd := encrypt(password, key) // 执行SQL语句 stmt, err := db.Prepare(sql) if err != nil { return err } defer stmt.Close() _, err = stmt.Exec(name, pwd) return err }
func getData(name,key string) (string,error) { // 打开数据库 db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test") if err != nil { return "",err } defer db.Close() // 定义查询SQL语句 sql := "SELECT password FROM user WHERE name = ?" // 执行SQL语句 stmt, err := db.Prepare(sql) if err != nil { return "",err } defer stmt.Close() // 读取数据并进行解密 var pwd string err = stmt.QueryRow(name).Scan(&pwd) if err != nil { return "",err } pwd = decrypt(pwd,key) return pwd,nil }
Ringkasnya, melalui algoritma penyulitan golang di atas dan proses storan yang disulitkan, data sensitif dalam pangkalan data boleh disulitkan dan disimpan untuk memastikan keselamatan data, sambil menghalang kebocoran data secara berkesan dan meningkatkan kebolehpercayaan dan keselamatan data .
Atas ialah kandungan terperinci prosedur tersimpan yang disulitkan golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!