using System.Security.Cryptography; using System.Text; namespace Application.Helpers; /// /// 개발자 포털용 ClientID/Secret/PAT 생성 및 해시 헬퍼. /// public static class ApiTokenGenerator { private const string Base62Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; public static string GenerateClientID() => "dpot_client_" + RandomBase62(24); public static string GenerateClientSecret() => "dpot_secret_" + RandomBase62(40); public static string GeneratePat() => "dpot_pat_" + RandomBase62(40); public static string Hash(string token) { var bytes = Encoding.UTF8.GetBytes(token); var hash = SHA256.HashData(bytes); return Convert.ToHexString(hash).ToLowerInvariant(); } public static string Hint(string token) => token.Length >= 4 ? token[^4..] : token; private static string RandomBase62(int length) { var sb = new StringBuilder(length); var bytes = RandomNumberGenerator.GetBytes(length); foreach (var b in bytes) { sb.Append(Base62Chars[b % Base62Chars.Length]); } return sb.ToString(); } }