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.

75 lines
1.6 KiB

2 years ago
  1. package util
  2. import (
  3. "bytes"
  4. "crypto/aes"
  5. "crypto/cipher"
  6. "encoding/base64"
  7. "strings"
  8. )
  9. var aesKey []byte
  10. func init() {
  11. aesKey = []byte("11e90a62f2fa07ce9e600242ac110007")
  12. }
  13. func pkcs7Padding(src []byte, blockSize int) []byte {
  14. padding := blockSize - len(src)%blockSize
  15. padText := bytes.Repeat([]byte{byte(padding)}, padding)
  16. return append(src, padText...)
  17. }
  18. func aesEncrypt(src, key []byte) ([]byte, error) {
  19. block, err := aes.NewCipher(key)
  20. if err != nil {
  21. return nil, err
  22. }
  23. blockSize := block.BlockSize()
  24. src = pkcs7Padding(src, blockSize)
  25. blockMode := cipher.NewCBCEncrypter(block, key[:blockSize])
  26. encrypted := make([]byte, len(src))
  27. blockMode.CryptBlocks(encrypted, src)
  28. return encrypted, nil
  29. }
  30. func aesDecrypt(encrypted, key []byte) ([]byte, error) {
  31. block, err := aes.NewCipher(key)
  32. if err != nil {
  33. return nil, err
  34. }
  35. blockSize := block.BlockSize()
  36. blockMode := cipher.NewCBCDecrypter(block, key[:blockSize])
  37. src := make([]byte, len(encrypted))
  38. blockMode.CryptBlocks(src, encrypted)
  39. src = pkcs7UnPadding(src)
  40. return src, nil
  41. }
  42. func pkcs7UnPadding(src []byte) []byte {
  43. length := len(src)
  44. unPadding := int(src[length-1])
  45. return src[:(length - unPadding)]
  46. }
  47. func AesEncrypt(src string) (string, error) {
  48. res, err := aesEncrypt([]byte(src), aesKey)
  49. if err != nil {
  50. r := base64.StdEncoding.EncodeToString(res)
  51. return r, nil
  52. } else {
  53. return "", err
  54. }
  55. }
  56. func AesDecrypt(src string) (string, error) {
  57. if len(src) == 0 || strings.TrimSpace(src) == "" {
  58. return "", nil
  59. }
  60. s, e := base64.StdEncoding.DecodeString(src)
  61. if e != nil {
  62. return "", e
  63. }
  64. res, err := aesDecrypt(s, aesKey)
  65. return string(res), err
  66. }