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  }