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