1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- package common
- import (
- "context"
- "crypto/aes"
- "crypto/cipher"
- "crypto/md5"
- "encoding/hex"
- "log/slog"
- "time"
- )
- import (
- md "google.golang.org/grpc/metadata"
- )
- var CstSh, _ = time.LoadLocation("Asia/Shanghai")
- const (
- LocateDateFormat = "2006-01-02"
- LocateTimeFormat = "2006-01-02 15:04:05"
- LocateMilliFormat = "2006-01-02 15:04:05.9999"
- )
- func Date() string {
- return time.Now().In(CstSh).Format(LocateDateFormat)
- }
- func Now() string {
- return time.Now().In(CstSh).Format(LocateTimeFormat)
- }
- func NowMilli() string {
- return time.Now().In(CstSh).Format(LocateMilliFormat)
- }
- func MD5(v []byte) string {
- h := md5.New()
- h.Write(v)
- re := h.Sum(nil)
- return hex.EncodeToString(re)
- }
- func GetHeader(ctx context.Context) (Product, Source, Lang) {
- m, ok := md.FromIncomingContext(ctx)
- if ok {
- slog.Debug("metadata.FromIncomingContext", "md", m)
- }
- return Product(m.Get("product")[0]), Source(m.Get("source")[0]), Lang(m.Get("language")[0])
- }
- var dbPwKey = []byte("X3O6wVF&6*&lSVk0*504V~q7>\"k]6S'*") // 32 bytes for AES-256
- var dbPwNonceHex = "1962a6f6f9999447632c8a34"
- func EncryptGCM(key []byte, nonce []byte, plaintext []byte) ([]byte, error) {
- block, err := aes.NewCipher(key)
- if err != nil {
- return nil, err
- }
- gcm, err := cipher.NewGCM(block)
- if err != nil {
- return nil, err
- }
- ciphertext := gcm.Seal(nil, nonce, plaintext, nonce)
- return ciphertext, nil
- }
- func DecryptGCM(key []byte, nonce []byte, ciphertext []byte) ([]byte, error) {
- block, err := aes.NewCipher(key)
- if err != nil {
- return nil, err
- }
- gcm, err := cipher.NewGCM(block)
- if err != nil {
- return nil, err
- }
- plaintext, err := gcm.Open(nil, nonce, ciphertext, nonce)
- if err != nil {
- return nil, err
- }
- return plaintext, nil
- }
- func DBPwdEncrypt(ciphertext []byte) ([]byte, error) {
- nonce, _ := hex.DecodeString(dbPwNonceHex)
- return EncryptGCM(dbPwKey, nonce, ciphertext)
- }
- func DBPwdDecrypt(ciphertext []byte) ([]byte, error) {
- nonce, _ := hex.DecodeString(dbPwNonceHex)
- return DecryptGCM(dbPwKey, nonce, ciphertext)
- }
|