|
|
- 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...)
- }
|