提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、AES是什么?
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中二者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128位,密钥长度则可以是128,192或256位;而Rijndael使用的密钥和区块长度可以是32位的整数倍,以128位为下限,256位为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。
二、go语言实现
import (
"crypto/aes"
"demo1/utils"
"crypto/cipher"
"fmt"
"encoding/hex"
)
package main
import (
"crypto/aes"
"demo1/utils"
"crypto/cipher"
"fmt"
"encoding/hex"
)
//aes加密
func EncryptAes(src, key []byte) []byte {
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
src = utils.PaddingText(src, block.BlockSize())
blockMode := cipher.NewCBCEncrypter(block, key[:block.BlockSize()])
dst := make([]byte, len(src))
blockMode.CryptBlocks(dst, src)
return dst
}
//aes解密
func DecryptAes(src, key []byte) []byte {
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
blockMode := cipher.NewCBCDecrypter(block, key[:block.BlockSize()])
dst := make([]byte, len(src))
blockMode.CryptBlocks(dst, src)
dst = utils.UnPaddingText(dst)
return dst
}
func main() {
src := []byte("wei")
//16 24 32
key := []byte("1234567887654321aabbccddxxyyzzhh")
encrypt_msg := EncryptAes(src, key)
fmt.Println("encrypt_msg = ", hex.EncodeToString(encrypt_msg))
decrypt_msg := DecryptAes(encrypt_msg, key)
fmt.Println("decrypt_msg = ", string(decrypt_msg))
}