[C#/COMMON] RNGCryptoServiceProvider 클래스 : GetBytes 메소드를 사용해 임시 패스워드 생성하기
C#/Common 2022. 7. 4. 01:11728x90
반응형
728x170
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
#region 임시 패스워드 생성하기 - CreateTemporaryPassword(length)
/// <summary>
/// 임시 패스워드 생성하기
/// </summary>
/// <param name="length">길이</param>
/// <returns>임시 패스워드</returns>
public string CreateTemporaryPassword(int length)
{
const string characterText = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return GetRandomString(characterText, length);
}
#endregion
#region 임의 문자열 구하기 - GetRandomString(characterEnumerable, length)
/// <summary>
/// 임의 문자열 구하기
/// </summary>
/// <param name="characterEnumerable">문자 열거 가능형</param>
/// <param name="length">길이</param>
/// <returns>임의 문자열</returns>
private string GetRandomString(IEnumerable<char> characterEnumerable, int length)
{
if(length < 0)
{
throw new ArgumentException("length must not be negative", "length");
}
if(length > int.MaxValue / 8)
{
throw new ArgumentException("length is too big", "length");
}
if(characterEnumerable == null)
{
throw new ArgumentNullException("characterEnumerable");
}
char[] characterArray = characterEnumerable.Distinct().ToArray();
if(characterArray.Length == 0)
{
throw new ArgumentException("characterEnumerable must not be empty", "characterEnumerable");
}
byte[] targetByteArray = new byte[length * 8];
new RNGCryptoServiceProvider().GetBytes(targetByteArray);
char[] targetCharacterArray = new char[length];
for(int i = 0; i < length; i++)
{
ulong value = BitConverter.ToUInt64(targetByteArray, i * 8);
targetCharacterArray[i] = characterArray[value % (uint)characterArray.Length];
}
return new string(targetCharacterArray);
}
#endregion
728x90
반응형
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON/.NET6] String 클래스 : Split 메소드를 사용해 문자열 분리하기 (0) | 2022.07.07 |
---|---|
[C#/COMMON/.NET6] List<T> 클래스 : 리스트 분리하기 (0) | 2022.07.07 |
[C#/COMMON/.NET6] String 클래스 : PadLeft 메소드를 사용해 숫자 앞에 0으로 채우기 (0) | 2022.07.07 |
[C#/COMMON/.NET6] 문자열 보간법에서 포맷 문자열을 사용해 숫자 앞에 0으로 채우기 (0) | 2022.07.07 |
[C#/COMMON/.NET6] RNGCryptoServiceProvider 클래스 : GetBytes 메소드를 사용해 임시 패스워드 생성하기 (0) | 2022.07.04 |
[C#/COMMON] RNGCryptoServiceProvider 클래스 : GetBytes 메소드를 사용해 토큰 생성하기 (0) | 2022.07.04 |
[C#/COMMON/.NET6] Random 클래스 : Next 메소드를 사용해 임시 패스워드 생성하기 (0) | 2022.07.04 |
[C#/COMMON/.NET6] 고정밀 지연 함수 만들기 (0) | 2022.07.04 |
[C#/COMMON/.NET5] HIGHT ECB 모드를 사용해 암호화/복호화하기 (0) | 2022.07.04 |
[C#/COMMON/.NET6] DateTime 구조체 : 특정 요일의 다음 날짜 구하기 (0) | 2022.07.02 |
댓글을 달아 주세요