1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package crypto
- import (
- "bytes"
- "crypto/aes"
- "crypto/cipher"
- "fmt"
- )
- func PKCS7Padding(ciphertext []byte, blockSize int) []byte {
- m := blockSize - len(ciphertext)%blockSize
- n := bytes.Repeat([]byte{byte(m)}, m)
- return append(ciphertext, n...)
- }
- func PKCS7UnPadding(origData []byte) []byte {
- m := len(origData)
- n := int(origData[m-1])
- return origData[:(m - n)]
- }
- func AesEncrypt(buf, key []byte) ([]byte, error) {
- block, err := aes.NewCipher(key)
- if err != nil {
- return nil, err
- }
- defer func() {
- if v := recover(); v != nil {
- err = fmt.Errorf("decrypt error %v", v)
- }
- }()
- blockSize := block.BlockSize()
- buf = PKCS7Padding(buf, blockSize)
- blockMode := cipher.NewCBCEncrypter(block, key[:blockSize])
- tmp := make([]byte, len(buf))
- blockMode.CryptBlocks(tmp, buf)
- return tmp, nil
- }
- func AesDecrypt(buf, key []byte) ([]byte, error) {
- block, err := aes.NewCipher(key)
- if err != nil {
- return nil, err
- }
- defer func() {
- if v := recover(); v != nil {
- err = fmt.Errorf("decrypt error %v", v)
- }
- }()
- blockSize := block.BlockSize()
- blockMode := cipher.NewCBCDecrypter(block, key[:blockSize])
- origData := make([]byte, len(buf))
- blockMode.CryptBlocks(origData, buf)
- origData = PKCS7UnPadding(origData)
- return origData, nil
- }
|