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
}
//填充最后一个分组
//src:待填充的明文
//blockSize:分组大小
func PaddingText(src []byte, blockSize int) []byte {
//求出最后一个分组需要填充的字节数
padding := blockSize - len(src)%blockSize//3
// [3,3,3]
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
}
//ciphertext:待填充的明文 blocksize:每个块的大小
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)
})
}
【Go】【密码学】【Day01】对字符串进行简单加解密
猜你喜欢
转载自blog.csdn.net/qq_36045898/article/details/113093520
今日推荐
周排行