commit 9c108160bebd6bad3b4ca85fdb0bdae52f1e32fb Author: 李光春 Date: Tue May 24 22:37:55 2022 +0800 - init diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..41d1aeb --- /dev/null +++ b/.drone.yml @@ -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 ./... \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..442794a --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.env +.git +.svn +.idea +.vscode +*.log +gomod.sh +/vendor/ \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b61ef4f --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module go.dtapp.net/goaes + +go 1.18 diff --git a/goaes.go b/goaes.go new file mode 100644 index 0000000..3692ec2 --- /dev/null +++ b/goaes.go @@ -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)] +} diff --git a/version.go b/version.go new file mode 100644 index 0000000..4542fc0 --- /dev/null +++ b/version.go @@ -0,0 +1,3 @@ +package goaes + +const Version = "1.0.0" diff --git a/version_test.go b/version_test.go new file mode 100644 index 0000000..381893d --- /dev/null +++ b/version_test.go @@ -0,0 +1,7 @@ +package goaes + +import "testing" + +func TestVersion(t *testing.T) { + t.Log(Version) +}