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 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| import ( "bytes" "crypto/aes" "crypto/cipher" "crypto/md5" "encoding/base64" "encoding/json" "fmt" )
func PKCS7Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padText := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padText...) }
func PKCS7UnPadding(origData []byte) []byte { length := len(origData) unpadding := int(origData[length-1]) return origData[:(length - unpadding)] }
func AesEncryptCBC(orig string, key, iv string) string { origData := []byte(orig) k := []byte(key)
block, _ := aes.NewCipher(k)
blockSize := block.BlockSize()
origData = PKCS7Padding(origData, blockSize)
ivCopy := []byte(iv) blockMode := cipher.NewCBCEncrypter(block, ivCopy[:blockSize])
cryted := make([]byte, len(origData))
blockMode.CryptBlocks(cryted, origData) return base64.StdEncoding.EncodeToString(cryted) }
func AesDecryptCBC(cryted string, key, iv string) string { crytedByte, _ := base64.StdEncoding.DecodeString(cryted) k := []byte(key)
block, _ := aes.NewCipher(k)
blockSize := block.BlockSize()
ivCopy := []byte(iv) blockMode := cipher.NewCBCDecrypter(block, ivCopy[:blockSize])
orig := make([]byte, len(crytedByte))
blockMode.CryptBlocks(orig, crytedByte)
orig = PKCS7UnPadding(orig) return string(orig) }
func main() { key := "a7gE3fH9jKmN1pQ2rS4tU6vY8zW9xL0" iv := "7hJ3kQxZW45mNpR" data := "123456" encrypted := AesEncryptCBC(data, key, iv) fmt.Println(encrypted) decrypted := AesDecryptCBC(encrypted, key, iv) fmt.Println(decrypted) }
|