12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package encryption
- import (
- "bytes"
- "crypto/aes"
- "crypto/cipher"
- "fmt"
- )
- type aesCBCWithNoPadding struct {
- key []byte
- iv []byte
- }
- func NewAesCBCWithNoPadding(key, iv []byte) *aesCBCWithNoPadding {
- return &aesCBCWithNoPadding{
- key: key,
- iv: iv,
- }
- }
- // AES加密函数
- func (a *aesCBCWithNoPadding) Encrypt(plaintext []byte) ([]byte, error) {
- if len(plaintext)%aes.BlockSize != 0 {
- padding := aes.BlockSize - len(plaintext)%aes.BlockSize
- plaintext = append(plaintext, bytes.Repeat([]byte{byte(padding)}, padding)...)
- }
- block, err := aes.NewCipher(a.key)
- if err != nil {
- return nil, err
- }
- //if len(plaintext)%aes.BlockSize != 0 {
- // return nil, fmt.Errorf("plaintext is not a multiple of the block size")
- //}
- ciphertext := make([]byte, len(plaintext))
- mode := cipher.NewCBCEncrypter(block, a.iv)
- mode.CryptBlocks(ciphertext, plaintext)
- return ciphertext, nil
- }
- // AES解密函数
- func (a *aesCBCWithNoPadding) Decrypt(ciphertext []byte) ([]byte, error) {
- block, err := aes.NewCipher(a.key)
- if err != nil {
- return nil, err
- }
- if len(ciphertext)%aes.BlockSize != 0 {
- return nil, fmt.Errorf("ciphertext is not a multiple of the block size")
- }
- plaintext := make([]byte, len(ciphertext))
- mode := cipher.NewCBCDecrypter(block, a.iv)
- mode.CryptBlocks(plaintext, ciphertext)
- return plaintext, nil
- }
|