1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
   | package main
  import ( 	"crypto/aes" 	"crypto/cipher" 	"crypto/rand" 	"encoding/base64" 	"fmt" 	"io" )
  func main() { 	text := "Hello, World!" 	key := []byte("1234567890123456")
  	 	encrypted := encrypt(key, text) 	fmt.Println(encrypted)
  	 	decrypted := decrypt(key, encrypted) 	fmt.Println(decrypted) }
  func encrypt(key []byte, text string) string { 	plaintext := []byte(text) 	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) 	return base64.StdEncoding.EncodeToString(ciphertext) }
  func decrypt(key []byte, cryptoText string) string { 	ciphertext, _ := base64.StdEncoding.DecodeString(cryptoText) 	block, err := aes.NewCipher(key) 	if err != nil { 		panic(err) 	} 	if len(ciphertext) < aes.BlockSize { 		panic("ciphertext too short") 	} 	iv := ciphertext[:aes.BlockSize] 	ciphertext = ciphertext[aes.BlockSize:] 	stream := cipher.NewCFBDecrypter(block, iv) 	stream.XORKeyStream(ciphertext, ciphertext) 	return fmt.Sprintf("%s", ciphertext) }
   |