You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

77 lines
2.1 KiB

package utils
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"encoding/base64"
"fmt"
)
/**
AES加密解密
使用CBC模式+PKCS7 填充方式实现AES的加密和解密
*/
const key = "Al89RRSWdczx132"
// 校验密码
func CheckPWD(password, enPassword string) bool {
de := AESDecrypt(enPassword)
if (password == de) {
return true
}
return false
}
// -----------------------------------------------------------
// ----------------------- 解密 ------------------------------
// -----------------------------------------------------------
// 先base64转码,再解密
func AESDecrypt(baseStr string) string {
crypted, err := base64.StdEncoding.DecodeString(baseStr)
fmt.Println(crypted)
if (err != nil) {
fmt.Println("base64 encoding 错误")
}
block,_ := aes.NewCipher([]byte(key))
blockSize := block.BlockSize()
blockMode := cipher.NewCBCDecrypter(block, []byte(key)[:blockSize])
originPWD := make([]byte, len(crypted))
blockMode.CryptBlocks(originPWD, crypted)
originPWD = pkcs7_unPadding(originPWD)
return string(originPWD)
}
// 补码
func pkcs7_unPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:length-unpadding]
}
// -----------------------------------------------------------
// ----------------------- 加密 ------------------------------
// -----------------------------------------------------------
// 加密后再base64编码成string
func AESEncrypt(originPWD []byte) string {
//获取block块
block,_ :=aes.NewCipher([]byte(key))
//补码
originPWD = pkcs7_padding(originPWD, block.BlockSize())
//加密模式,
blockMode := cipher.NewCBCEncrypter(block, []byte(key)[:block.BlockSize()])
//创建明文长度的数组
crypted := make([]byte,len(originPWD))
//加密明文
blockMode.CryptBlocks(crypted, originPWD)
return base64.StdEncoding.EncodeToString(crypted)
}
// 补码
func pkcs7_padding(origData []byte, blockSize int) []byte {
//计算需要补几位数
padding := blockSize-len(origData)%blockSize
//在切片后面追加char数量的byte(char)
padtext := bytes.Repeat([]byte{byte(padding)},padding)
return append(origData,padtext...)
}