代码拉取完成,页面将自动刷新
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"fmt"
)
func paddingText(src []byte, blockSize int) []byte {
//1.求出最后一个分组需要填充多少字节
padding := blockSize - len(src)%blockSize
//2.创建新的切片,切片的长度为padding,切片内的数值也为padding
padText := bytes.Repeat([]byte{byte(padding)}, padding)
//3.将新的切片放到原来数据的最后
newText := append(src, padText...)
return newText
}
func unPaddingText(src []byte) []byte {
//1.求出数据一共填充了多少字节
padding := int(src[len(src)-1])
//2.将原先填充的数据去除
newText := src[:len(src)-padding]
return newText
}
func encryptAes(src, key []byte) []byte {
//
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//
src = paddingText(src, block.BlockSize())
//
blockMode := cipher.NewCBCEncrypter(block, key)
//
blockMode.CryptBlocks(src, src)
//
return src
}
func decryptAes(src, key []byte) []byte {
//
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
//
blockMode := cipher.NewCBCDecrypter(block, key)
//
blockMode.CryptBlocks(src, src)
//
src = unPaddingText(src)
return src
}
func testPadding() {
str := []byte("hello,world!")
fmt.Println(string(str))
str = paddingText(str, 8)
fmt.Println(string(str))
str = unPaddingText(str)
fmt.Println(string(str))
}
func main() {
// testPadding()
//明文
str := []byte("百川东到海,何时复西归。少壮不努力,老大徒伤悲。")
key := []byte("12345678abcdefgh")
fmt.Println(string(str))
//密文
str = encryptAes(str, key)
fmt.Println(string(str))
//明文
str = decryptAes(str, key)
fmt.Println(string(str))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。