commit
9c108160be
@ -0,0 +1,11 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: clone
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Test
|
||||||
|
image: golang:1.18
|
||||||
|
commands:
|
||||||
|
- go env -w GO111MODULE=on
|
||||||
|
- go env -w GOPROXY=https://goproxy.cn,direct
|
||||||
|
- go test -v ./...
|
@ -0,0 +1,8 @@
|
|||||||
|
.env
|
||||||
|
.git
|
||||||
|
.svn
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
*.log
|
||||||
|
gomod.sh
|
||||||
|
/vendor/
|
@ -0,0 +1,57 @@
|
|||||||
|
package goaes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"crypto/aes"
|
||||||
|
"crypto/cipher"
|
||||||
|
"encoding/base64"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Encrypt 加密 aes_128_cbc
|
||||||
|
func Encrypt(encryptStr string, key []byte, iv string) (string, error) {
|
||||||
|
encryptBytes := []byte(encryptStr)
|
||||||
|
block, err := aes.NewCipher(key)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
blockSize := block.BlockSize()
|
||||||
|
encryptBytes = pkcs5Padding(encryptBytes, blockSize)
|
||||||
|
|
||||||
|
blockMode := cipher.NewCBCEncrypter(block, []byte(iv))
|
||||||
|
encrypted := make([]byte, len(encryptBytes))
|
||||||
|
blockMode.CryptBlocks(encrypted, encryptBytes)
|
||||||
|
return base64.URLEncoding.EncodeToString(encrypted), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decrypt 解密
|
||||||
|
func Decrypt(decryptStr string, key []byte, iv string) (string, error) {
|
||||||
|
decryptBytes, err := base64.URLEncoding.DecodeString(decryptStr)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
block, err := aes.NewCipher(key)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
blockMode := cipher.NewCBCDecrypter(block, []byte(iv))
|
||||||
|
decrypted := make([]byte, len(decryptBytes))
|
||||||
|
|
||||||
|
blockMode.CryptBlocks(decrypted, decryptBytes)
|
||||||
|
decrypted = pkcs5UnPadding(decrypted)
|
||||||
|
return string(decrypted), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func pkcs5Padding(cipherText []byte, blockSize int) []byte {
|
||||||
|
padding := blockSize - len(cipherText)%blockSize
|
||||||
|
padText := bytes.Repeat([]byte{byte(padding)}, padding)
|
||||||
|
return append(cipherText, padText...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func pkcs5UnPadding(decrypted []byte) []byte {
|
||||||
|
length := len(decrypted)
|
||||||
|
unPadding := int(decrypted[length-1])
|
||||||
|
return decrypted[:(length - unPadding)]
|
||||||
|
}
|
@ -0,0 +1,3 @@
|
|||||||
|
package goaes
|
||||||
|
|
||||||
|
const Version = "1.0.0"
|
@ -0,0 +1,7 @@
|
|||||||
|
package goaes
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestVersion(t *testing.T) {
|
||||||
|
t.Log(Version)
|
||||||
|
}
|
Loading…
Reference in new issue