github.com/sereiner/library@v0.0.0-20200518095232-1fa3e640cc5f/security/des/padding.go (about) 1 package des 2 3 import "bytes" 4 5 // ZeroPadding Zero填充模式 6 func ZeroPadding(ciphertext []byte, blockSize int) []byte { 7 padding := blockSize - len(ciphertext)%blockSize 8 padtext := bytes.Repeat([]byte{0}, padding) 9 return append(ciphertext, padtext...) 10 } 11 12 // ZeroUnPadding 去除Zero的补码 13 func ZeroUnPadding(origData []byte) []byte { 14 return bytes.TrimRightFunc(origData, func(r rune) bool { 15 return r == rune(0) 16 }) 17 } 18 19 // PKCS5Padding PKCS5填充模式 20 func PKCS5Padding(ciphertext []byte, blockSize int) []byte { 21 padding := blockSize - len(ciphertext)%blockSize 22 padtext := bytes.Repeat([]byte{byte(padding)}, padding) 23 return append(ciphertext, padtext...) 24 } 25 26 // PKCS5UnPadding 去除PKCS5的补码 27 func PKCS5UnPadding(origData []byte) []byte { 28 length := len(origData) 29 // 去掉最后一个字节 unpadding 次 30 unpadding := int(origData[length-1]) 31 return origData[:(length - unpadding)] 32 } 33 34 // PKCS7Padding PKCS7填充模式 35 func PKCS7Padding(data []byte) []byte { 36 blockSize := 16 37 padding := blockSize - len(data)%blockSize 38 padtext := bytes.Repeat([]byte{byte(padding)}, padding) 39 return append(data, padtext...) 40 41 } 42 43 // PKCS7UnPadding 去除PKCS7的补码 44 func PKCS7UnPadding(data []byte) []byte { 45 length := len(data) 46 // 去掉最后一个字节 unpadding 次 47 unpadding := int(data[length-1]) 48 return data[:(length - unpadding)] 49 }