GO語言實現(xiàn)AES-CFB加密的操作方法
更新時間:2024年10月29日 10:02:51 作者:且去填詞
本文介紹了如何用Go語言實現(xiàn)AES-CFB加密和解密,首先,定義一個屬于encrypt包的文件,使用AES算法、CFB模式和Base64編碼等功能,在加密函數(shù)中,接收明文和密鑰,生成一個AES塊密碼和一個隨機(jī)的初始化向量,實現(xiàn)明文的加密
這里為了使用方便,實現(xiàn)代碼不作為一個函數(shù)而是作為一個包,這樣在后面的代碼中也可以進(jìn)行復(fù)用。
包和導(dǎo)入
package encrypt import ( "crypto/aes" // 提供 AES 加密算法實現(xiàn) "crypto/cipher" // 提供加密算法接口和模式(如 CFB) "crypto/rand" // 提供生成隨機(jī)數(shù)功能 "encoding/base64" // 提供 Base64 編碼和解碼 "fmt" // 格式化 I/O "io" // 基本 I/O 接口 )
package encrypt: 定義該文件屬于 encrypt 包。
各種導(dǎo)入用于提供不同功能,如 AES 算法、CFB 模式、Base64 編碼等。
Encrypt 函數(shù)
// Encrypt 對明文進(jìn)行AES-CFB加密 func Encrypt(plaintext []byte, key string) (string, error) { block, err := aes.NewCipher([]byte(key)) if err != nil { return "", err } iv := make([]byte, aes.BlockSize) if _, err := io.ReadFull(rand.Reader, iv); err != nil { return "", err } stream := cipher.NewCFBEncrypter(block, iv) ciphertext := make([]byte, len(plaintext)) stream.XORKeyStream(ciphertext, plaintext) // 合并 IV 和密文 result := append(iv, ciphertext...) // 使用 Base64 編碼返回 return base64.StdEncoding.EncodeToString(result), nil }
- Encrypt 函數(shù)接收明文和用于 AES 加密的密鑰。
- aes.NewCipher([]byte(key)): 利用提供的密鑰生成一個 AES 塊密碼。
- iv(初始化向量)是 AES 塊大?。?6 字節(jié))的隨機(jī)數(shù),確保同樣的明文每次加密結(jié)果不同。
- 使用 cipher.NewCFBEncrypter 創(chuàng)建 CFB 加密
- stream.XORKeyStream(ciphertext, plaintext): 用流加密對明文進(jìn)行加密,結(jié)果保存在 ciphertext 中。
- 將 iv 和 ciphertext 合并為一個切片,然后使用 Base64 編碼生成字符串
Decrypt 函數(shù)
// Decrypt 對密文進(jìn)行AES-CFB解密 func Decrypt(ciphertextBase64 string, key string) ([]byte, error) { ciphertext, err := base64.StdEncoding.DecodeString(ciphertextBase64) if err != nil { return nil, err } block, err := aes.NewCipher([]byte(key)) if err != nil { return nil, err } if len(ciphertext) < aes.BlockSize { return nil, fmt.Errorf("ciphertext too short") } iv := ciphertext[:aes.BlockSize] ciphertext = ciphertext[aes.BlockSize:] stream := cipher.NewCFBDecrypter(block, iv) plaintext := make([]byte, len(ciphertext)) stream.XORKeyStream(plaintext, ciphertext) return plaintext, nil }
- Decrypt 函數(shù)接收 Base64 編碼的密文和密鑰。 將 Base64 密文解碼成字節(jié)切片。 類似加密過程,生成 AES 塊密碼。
- 驗證密文長度,確保其大于 AES 塊大小。 從解碼后的密文中提取 iv,其余部分為實際密文。 使用cipher.NewCFBDecrypter 函數(shù)創(chuàng)建 CFB 解密流。 解密密文,得出明文。
注意事項
- 使用 CFB 模式不需要明文填充。 密鑰長度應(yīng)為 16, 24 或 32 字節(jié),以匹配 AES-128, AES-192 或AES-256。 隨機(jī) iv 很重要,每次加密都使用新的 iv 增強(qiáng)安全性。
到此這篇關(guān)于GO語言實現(xiàn)AES-CFB加密的文章就介紹到這了,更多相關(guān)GO語言 AES-CFB加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
夯實Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總
這篇文章主要8為大家介紹了夯實Golang基礎(chǔ)之?dāng)?shù)據(jù)類型梳理匯總,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-10-10