package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"fmt"
)
//aes是对称加密算法的一种,Ctr是分组迭代模式的一种,需要初始向量,使用了流密钥而非分组密钥
func aesEncrypt(plainText, key []byte) ([]byte, error) {
//1 创建aes密码接口 go内置aes包
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
fmt.Println("打印aes算法的分组长度:", block.BlockSize())
//2 创建分组的迭代模式 需要初始化向量 返回一个流密钥
iv := bytes.Repeat([]byte("1"), block.BlockSize())
stream := cipher.NewCTR(block, iv)
//3 加密 先给秘闻开辟一块存储空间,然后加密明文
dst := make([]byte, len(plainText))
stream.XORKeyStream(dst, plainText)
return dst, nil
}
func aesDecrypt(encryptData, key []byte) ([]byte, error) {
return aesEncrypt(encryptData, key)
}
func main() {
src := "你好吗你好吗你好吗你好吗"
key := []byte("1234567887654321")
encryptData, err := aesEncrypt([]byte(src), key)
if err != nil {
fmt.Println("加密错误:", err)
return
}
fmt.Printf("加密后数据:%x\n", encryptData)
plaintText, err := aesDecrypt(encryptData, key)
if err != nil {
fmt.Println("解密错误:", err)
}
fmt.Printf("解密后数据:%s\n", plaintText)
}