package tools import ( "crypto/rc4" "encoding/hex" "encoding/json" ) const ( TokenKey = "z1eRU{fq*VtfLAszrz" ) type StateToken struct { UserID string `json:"user_id"` Service string `json:"service"` // yandex, google, etc RedirectUrl string `json:"redirect_url"` } func EncryptTokenRC4(data any) (string, error) { cipher, err := rc4.NewCipher([]byte(TokenKey)) if err != nil { return "", err } msg, err := json.Marshal(data) if err != nil { return "", err } encrypted := make([]byte, len(msg)) cipher.XORKeyStream(encrypted, msg) return hex.EncodeToString(encrypted), nil } func DecryptTokenRC4(data string, result any) error { cipher, err := rc4.NewCipher([]byte(TokenKey)) if err != nil { return err } msg, err := hex.DecodeString(data) if err != nil { return err } decrypted := make([]byte, len(msg)) cipher.XORKeyStream(decrypted, msg) err = json.Unmarshal(decrypted, &result) if err != nil { return err } return nil }