aes.go 915 B

123456789101112131415161718192021222324252627282930313233
  1. // Copyright 2021 Tencent Inc. All rights reserved.
  2. package utils
  3. import (
  4. "crypto/aes"
  5. "crypto/cipher"
  6. "encoding/base64"
  7. )
  8. // DecryptAES256GCM 使用 AEAD_AES_256_GCM 算法进行解密
  9. //
  10. // 你可以使用此算法完成微信支付平台证书和回调报文解密,详见:
  11. // https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/zheng-shu-he-hui-tiao-bao-wen-jie-mi
  12. func DecryptAES256GCM(aesKey, associatedData, nonce, ciphertext string) (plaintext string, err error) {
  13. decodedCiphertext, err := base64.StdEncoding.DecodeString(ciphertext)
  14. if err != nil {
  15. return "", err
  16. }
  17. c, err := aes.NewCipher([]byte(aesKey))
  18. if err != nil {
  19. return "", err
  20. }
  21. gcm, err := cipher.NewGCM(c)
  22. if err != nil {
  23. return "", err
  24. }
  25. dataBytes, err := gcm.Open(nil, []byte(nonce), decodedCiphertext, []byte(associatedData))
  26. if err != nil {
  27. return "", err
  28. }
  29. return string(dataBytes), nil
  30. }