padding.go 968 B

12345678910111213141516171819202122232425
  1. package aes
  2. import (
  3. "bytes"
  4. )
  5. /**
  6. * 填充有六种:NoPadding, PKCS#5, PKCS#7, ISO 10126, ANSI X9.23和ZerosPadding
  7. * 对于AES来说PKCS5Padding和PKCS7Padding是完全一样的,不同在于PKCS5限定了块大小为8bytes而PKCS7没有限定
  8. * 因此对于AES来说两者完全相同,但是对于Rijndael就不一样了
  9. * AES是Rijndael在块大小为8bytes时的特例,对于使用其他信息块大小的Rijndael算法只能使用PKCS7
  10. * 在AES加密当中严格来说是不能使用pkcs5的,因为AES的块大小是16bytes而pkcs5只能用于8bytes,通常我们在AES加密中所说的pkcs5指的就是pkcs7
  11. */
  12. func pkcsPadding(cipherText []byte, blockSize int) []byte {
  13. p := blockSize - len(cipherText)%blockSize
  14. padText := bytes.Repeat([]byte{byte(p)}, p)
  15. return append(cipherText, padText...)
  16. }
  17. func pkcsUnPadding(decrypted []byte) []byte {
  18. length := len(decrypted)
  19. u := int(decrypted[length-1])
  20. return decrypted[:(length - u)]
  21. }