using System.Security.Cryptography; using System.Text; namespace YD_Event.Application.CitizenSports; internal static class CitizenSportsSigner { internal static string Create(string clientId, string secretKey, long unixTimestamp) { var key = Encoding.UTF8.GetBytes(secretKey); if (key.Length != 32) throw new ArgumentException("SecretKey 必须是 32 字节", nameof(secretKey)); var plainText = Encoding.UTF8.GetBytes($"{clientId}_{unixTimestamp}"); using var aes = Aes.Create(); aes.Key = key; aes.Mode = CipherMode.ECB; aes.Padding = PaddingMode.PKCS7; using var encryptor = aes.CreateEncryptor(); var encrypted = encryptor.TransformFinalBlock(plainText, 0, plainText.Length); var base64 = Convert.ToBase64String(encrypted); return Convert.ToHexString(Encoding.UTF8.GetBytes(base64)).ToLowerInvariant(); } }