1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-17 16:12:42 +08:00
Files
go-mixed/crypto/block.go
2022-03-27 10:21:30 +08:00

59 lines
1.2 KiB
Go

package crypto
import (
"crypto/cipher"
"errors"
)
type blockCipher struct {
}
func (b *blockCipher) ecbEncrypt(block cipher.Block, data []byte) ([]byte, error) {
bs := block.BlockSize()
data = PKCS7Padding(data, bs)
out := make([]byte, len(data))
dst := out
for len(data) > 0 {
block.Encrypt(dst, data[:bs])
data = data[bs:]
dst = dst[bs:]
}
return out, nil
}
func (b *blockCipher) ecbDecrypt(block cipher.Block, cipherText []byte) ([]byte, error) {
bs := block.BlockSize()
if len(cipherText)%bs != 0 {
return nil, errors.New("DecryptDES crypto/cipher: input not full blocks")
}
out := make([]byte, len(cipherText))
dst := out
for len(cipherText) > 0 {
block.Decrypt(dst, cipherText[:bs])
cipherText = cipherText[bs:]
dst = dst[bs:]
}
return PKCS7UnPadding(out), nil
}
func (b *blockCipher) encrypt(block cipher.BlockMode, data []byte) ([]byte, error) {
data = PKCS7Padding(data, block.BlockSize())
out := make([]byte, len(data))
block.CryptBlocks(out, data)
return out, nil
}
func (b *blockCipher) decrypt(block cipher.BlockMode, cipherText []byte) ([]byte, error) {
out := make([]byte, len(cipherText))
block.CryptBlocks(out, cipherText)
return PKCS7UnPadding(out), nil
}