Toggle navigation
首页
[
Markdown
]
golang实现加密解密的库很多, 这里使用的是aes库+base64库来实现. 使用时,需要指定一个私钥,来进行加解密. 上代码: ``` package main import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" ) type AesCrypt struct { Key []byte Text []byte crypt string } func (t *AesCrypt) PKCS5Padding(cipherText []byte, blockSize int) []byte { padding := blockSize - len(cipherText)%blockSize padText := bytes.Repeat([]byte{byte(padding)}, padding) return append(cipherText, padText...) } func (t *AesCrypt) PKCS5UnPadding(data []byte) []byte { length := len(data) unPadding := int(data[length-1]) return data[:(length - unPadding)] } func (t *AesCrypt) encrypt() (string, error) { block, err := aes.NewCipher(t.Key) if err != nil { return "", err } blockSize := block.BlockSize() t.Text = t.PKCS5Padding(t.Text, blockSize) blockMode := cipher.NewCBCEncrypter(block, t.Key[:blockSize]) data := make([]byte, len(t.Text)) blockMode.CryptBlocks(data, t.Text) return base64.StdEncoding.EncodeToString(data), nil } func (t *AesCrypt) decrypt() ([]byte, error) { crypted, err := base64.StdEncoding.DecodeString(t.crypt) if err != nil { return nil, err } block, err := aes.NewCipher(t.Key) if err != nil { return nil, err } blockSize := block.BlockSize() blockMode := cipher.NewCBCDecrypter(block, t.Key[:blockSize]) data := make([]byte, len(crypted)) blockMode.CryptBlocks(data, crypted) data = t.PKCS5UnPadding(data) return data, nil } func main() { key := []byte("12345678123456cc") //私钥 word := []byte("this is test!") //要加密的字符串 var aesCrypt AesCrypt //设置key aesCrypt.Key = key //加密 aesCrypt.Text = word crypt, err := aesCrypt.encrypt() if err != nil { fmt.Println(err) return } fmt.Printf("加密后:%vn", crypt) //解密 aesCrypt.crypt = crypt word, err = aesCrypt.decrypt() if err != nil { fmt.Println(err) return } fmt.Printf("解密后:%sn", word) } ``` 输出: ``` 加密后:6/soAEkh3oVaIZkABcwjJQ== 解密后:this is test! ```
[
Html
]