package util
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"errors"
)
func aesDecrypt(cipherText []byte, key, iv []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, errors.New("illegal secret")
}
// 检验密文长度是否正确
blockSize := block.BlockSize()
if len(cipherText) < blockSize {
return nil, errors.New("illegal cipherText: too small")
}
if len(cipherText)%blockSize != 0 {
return nil, errors.New("illegal cipherText")
}
// 创建CBC解密模式
blockModel := cipher.NewCBCDecrypter(block, iv)
// 解密生成平文
plainText := make([]byte, len(cipherText))
blockModel.CryptBlocks(plainText, cipherText)
// 去掉最后一个平文块的填充内容
plainText = bytes.TrimSpace(plainText)
return plainText, nil
}
func AesDecrypt(cipherTextWithBase64 []byte, key, iv []byte) ([]byte, error) {
cipherText := make([]byte, base64.StdEncoding.DecodedLen(len(cipherTextWithBase64)))
n, err := base64.StdEncoding.Decode(cipherText, cipherTextWithBase64)
if err != nil {
return nil, err
}
return aesDecrypt(cipherText[:n], key, iv)
}
// plainText: 明文
// key: 密钥
// iv: 初始化向量
func aesEncrypt(plainText []byte, key []byte, iv []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, errors.New("illegal secret")
}
plainText = spacePadding(plainText, block.BlockSize())
// 创建CBC加密模式
blockMode := cipher.NewCBCEncrypter(block, iv)
cipherText := make([]byte, len(plainText))
blockMode.CryptBlocks(cipherText, plainText)
return cipherText, nil
}
func spacePadding(src []byte, blockSize int) []byte {
padding := blockSize - len(src)%blockSize
padText := bytes.Repeat([]byte(" "), padding)
return append(src, padText...)
}
func AesEncrypt(plainText, key, iv []byte) ([]byte, error) {
cipherText, err := aesEncrypt(plainText, key, iv)
if err != nil {
return nil, err
}
cipherTextBase64 := make([]byte, base64.StdEncoding.EncodedLen(len(cipherText)))
base64.StdEncoding.Encode(cipherTextBase64, cipherText)
return cipherTextBase64, nil
}
go加密代码
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近有一个https双向认证的项目,客户端的证书是加密的,之前用python requests 做原型测试发现不支...
- JavaScript代码混淆加密 前言:众所周知,JavaScript大都是运行在浏览器端,这就导致任何人都可以直...
- PHP代码加密工具 Xend - 专注于PHP加密与PHP代码保护 Xend加密、Xend加密工具、phpxend...
- 转自:PHP代码安全【PHP弱口令、加密函数、绕过函数】/CTF代码审计题 - Sp4rkW的博客 - CSDN博...