package main
import (
"bytes"
"encoding/hex"
"fmt"
)
func main() {
data := []byte("ReganYue")
encrypt_msg := EnCrypt("123", data)
fmt.Println("encrypt_msg = ", encrypt_msg)
fmt.Printf("%x\n", encrypt_msg)
fmt.Println(hex.EncodeToString(encrypt_msg))
decrypt_msg := DeCrypt("123", encrypt_msg)
fmt.Println("decrypt_msg = ", string(decrypt_msg))
}
func EnCrypt(key string, data []byte) []byte {
sum := 0
for i := 0; i < len(key); i++ {
sum = sum + int(key[i])
}
pad := PaddingText(data, len(key))
for i := 0; i < len(pad); i++ {
pad[i] = pad[i] + byte(sum)
}
return pad
}
func DeCrypt(key string, cipherTxt []byte) []byte {
sum := 0
for i := 0; i < len(key); i++ {
sum = sum + int(key[i])
}
for i := 0; i < len(cipherTxt); i++ {
cipherTxt[i] = cipherTxt[i] - byte(sum)
}
p := UnPaddingText(cipherTxt)
return p
}
func PaddingText(src []byte, blockSize int) []byte {
padding := blockSize - len(src)%blockSize
padText := bytes.Repeat([]byte{
byte(padding)}, padding)
nextText := append(src, padText...)
return nextText
}
func UnPaddingText(src []byte) []byte {
len := len(src)
number := int(src[len-1])
newText := src[:len-number]
return newText
}
func ZeroPadding(ciphertext []byte, blocksize int) []byte {
padding := blocksize - len(ciphertext)%blocksize
padtext := bytes.Repeat([]byte{
0}, padding)
return append(ciphertext, padtext...)
}
func ZeroUnPadding(origdata []byte) []byte {
return bytes.TrimRightFunc(origdata, func (r rune) bool {
return r == rune(0)
})
}