1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package util
- import (
- "crypto/aes"
- "crypto/cipher"
- "crypto/rand"
- "fmt"
- "io"
- )
- // KeyAES func
- func KeyAES() []byte {
- var err error
- var key = make([]byte, 32)
- if _, err = rand.Read(key); err != nil {
- panic(fmt.Errorf("Error generate aes key\n\n%+v", err))
- }
- return key
- }
- // EncryptAES func
- func EncryptAES(key, data []byte) []byte {
- block, err := aes.NewCipher(key)
- if err != nil {
- panic(err)
- }
- ciphertext := make([]byte, aes.BlockSize+len(data))
- 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:], data)
- return ciphertext
- }
- // DecryptAES func
- func DecryptAES(key, ciphertext []byte) []byte {
- block, err := aes.NewCipher(key)
- if err != nil {
- panic(fmt.Errorf("Error creating new block cipher\n%v\n", err))
- }
- if len(ciphertext) < aes.BlockSize {
- panic(fmt.Errorf("ciphertext too short"))
- }
- iv := ciphertext[:aes.BlockSize]
- ciphertext = ciphertext[aes.BlockSize:]
- stream := cipher.NewCFBDecrypter(block, iv)
- // XORKeyStream can work in-place if the two arguments are the same.
- stream.XORKeyStream(ciphertext, ciphertext)
- return ciphertext
- }
|