Skip to content

Instantly share code, notes, and snippets.

@nullish-dev
Forked from nanmu42/pkcs7padding.go
Created June 11, 2025 04:45
Show Gist options
  • Select an option

  • Save nullish-dev/ea47bddd39effda4b93d5d4fcf559aa1 to your computer and use it in GitHub Desktop.

Select an option

Save nullish-dev/ea47bddd39effda4b93d5d4fcf559aa1 to your computer and use it in GitHub Desktop.
Golang PKCS7 Padding/Unpadding
// pkcs7strip remove pkcs7 padding
func pkcs7strip(data []byte, blockSize int) ([]byte, error) {
length := len(data)
if length == 0 {
return nil, errors.New("pkcs7: Data is empty")
}
if length%blockSize != 0 {
return nil, errors.New("pkcs7: Data is not block-aligned")
}
padLen := int(data[length-1])
ref := bytes.Repeat([]byte{byte(padLen)}, padLen)
if padLen > blockSize || padLen == 0 || !bytes.HasSuffix(data, ref) {
return nil, errors.New("pkcs7: Invalid padding")
}
return data[:length-padLen], nil
}
// pkcs7pad add pkcs7 padding
func pkcs7pad(data []byte, blockSize int) ([]byte, error) {
if blockSize <= 1 || blockSize >= 256 {
return nil, fmt.Errorf("pkcs7: Invalid block size %d", blockSize)
} else {
padLen := blockSize - len(data) % blockSize
padding := bytes.Repeat([]byte{byte(padLen)}, padLen)
return append(data, padding...), nil
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment