ApiTokenGenerator.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. using System.Security.Cryptography;
  2. using System.Text;
  3. namespace Application.Helpers;
  4. /// <summary>
  5. /// 개발자 포털용 ClientID/Secret/PAT 생성 및 해시 헬퍼.
  6. /// </summary>
  7. public static class ApiTokenGenerator
  8. {
  9. private const string Base62Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  10. public static string GenerateClientID() => "dpot_client_" + RandomBase62(24);
  11. public static string GenerateClientSecret() => "dpot_secret_" + RandomBase62(40);
  12. public static string GeneratePat() => "dpot_pat_" + RandomBase62(40);
  13. public static string Hash(string token)
  14. {
  15. var bytes = Encoding.UTF8.GetBytes(token);
  16. var hash = SHA256.HashData(bytes);
  17. return Convert.ToHexString(hash).ToLowerInvariant();
  18. }
  19. public static string Hint(string token) => token.Length >= 4 ? token[^4..] : token;
  20. private static string RandomBase62(int length)
  21. {
  22. var sb = new StringBuilder(length);
  23. var bytes = RandomNumberGenerator.GetBytes(length);
  24. foreach (var b in bytes)
  25. {
  26. sb.Append(Base62Chars[b % Base62Chars.Length]);
  27. }
  28. return sb.ToString();
  29. }
  30. }