package utils import ( "bytes" "crypto/aes" "crypto/cipher" "git.rosy.net.cn/baseapi" ) func AESCBCEncpryt(data, aesKey, iv []byte) (encryptedData []byte, err error) { c, err := aes.NewCipher(aesKey) if err != nil { return nil, err } cfbdec := cipher.NewCBCEncrypter(c, iv[:c.BlockSize()]) data = PKCSPadding(data, c.BlockSize()) encryptedData = make([]byte, len(data)) cfbdec.CryptBlocks(encryptedData, data) return encryptedData, nil } func AESCBCDecpryt(encryptedData, aesKey, iv []byte) (decryptedData []byte, err error) { c, err := aes.NewCipher(aesKey) if err != nil { return nil, err } cfbdec := cipher.NewCBCDecrypter(c, iv[:c.BlockSize()]) decryptedData = make([]byte, len(encryptedData)) cfbdec.CryptBlocks(decryptedData, encryptedData) decryptedData = PKCSUnPadding(decryptedData) return decryptedData, nil } func PKCSUnPadding(originData []byte) []byte { length := len(originData) unpadding := int(originData[length-1]) baseapi.SugarLogger.Debugf("PKCSUnPadding originData:%s, length:%d, unpadding:%d", string(originData), length, unpadding) return originData[:(length - unpadding)] } func PKCSPadding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...) }