Ai
1 Star 0 Fork 0

叶明志/golang练习

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
main.go 1.66 KB
一键复制 编辑 原始数据 按行查看 历史
yemingzhi 提交于 2020-03-30 22:56 +08:00 . 加密算法和hash的使用
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))
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/yemingzhi/GolangLearnPractice1.git
git@gitee.com:yemingzhi/GolangLearnPractice1.git
yemingzhi
GolangLearnPractice1
golang练习
2bf136849dce

搜索帮助