2023-10-03 12:50:20
在Go语言中,针对MD5计算、AES加密和文件目录遍历等需求,优先推荐使用标准库,其性能可靠且安全性有保障。以下是具体库和用法说明:
1. MD5计算优势:官方维护,性能稳定,无需引入第三方依赖。
示例代码:import ( "crypto/md5" "encoding/hex" "fmt")func main() { data := []byte("hello world") hash := md5.Sum(data) md5Str := hex.EncodeToString(hash[:]) fmt.Println("MD5:", md5Str) // 输出: 5eb63bbbe01eeed093cb22bb8f5acdc3}
优势:支持AES-128、AES-192、AES-256等标准加密模式,官方实现安全性高。
补充说明:需结合cipher包(如crypto/cipher)实现完整加密流程(如CBC、GCM模式)。
示例代码(AES-CBC):import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/hex" "fmt" "io")func main() { key := []byte("examplekey123456") // 16/24/32字节对应AES-128/192/256 plaintext := []byte("secret data") block, err := aes.NewCipher(key) if err != nil { panic(err) } ciphertext := make([]byte, aes.BlockSize+len(plaintext)) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { panic(err) } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext) fmt.Println("Ciphertext:", hex.EncodeToString(ciphertext))}
常用函数:
ioutil.ReadDir(简单目录读取,Go 1.16后建议用os.ReadDir):import "os"func main() { entries, err := os.ReadDir(".") if err != nil { panic(err) } for _, entry := range entries { fmt.Println(entry.Name()) }}
filepath.Walk(递归遍历目录):import ( "fmt" "os" "path/filepath")func main() { err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { if err != nil { return err } fmt.Println(path) return nil }) if err != nil { panic(err) }}
filepath.Glob(路径模式匹配):import ( "fmt" "path/filepath")func main() { matches, err := filepath.Glob("*.go") if err != nil { panic(err) } for _, match := range matches { fmt.Println(match) }}
通过合理利用标准库,可避免重复造轮子,专注业务逻辑开发。