고유 암호 생성을위한 임의 시드 가져 오기

게오르그 정

복잡성 요구 사항을 충족하는 암호를 생성하는 간단한 모듈을 작성했습니다.

Module PasswordGenerator
   Private ReadOnly _alphaChars As Char() = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".ToArray()
   Private ReadOnly _digitChars As Char() = "0123456789".ToArray()
   Private ReadOnly _nonAlphaNumChars As Char() = "_-.,:;!$%&/()[]=+#".ToArray()
   Private ReadOnly _allPswChars As Char() = _alphaChars.Concat(_digitChars).Concat(_nonAlphaNumChars).ToArray()

   Public Function GeneratePassword(length As Integer, minNonAlphaNum As Integer, minDigits As Integer) As String
      Return GeneratePassword(length, minNonAlphaNum, minDigits, New Random(GetSeed()))
   End Function

   Public Function GeneratePassword(length As Integer, minNonAlphaNum As Integer, minDigits As Integer, rnd As Random) As String
      Dim selectedChars As List(Of Char),
          psw As String,
          rndSelectedChar As Integer
      If length < (minNonAlphaNum + minDigits) Then Throw New ArgumentException
      selectedChars = New List(Of Char)(length)
      selectedChars.AddRange(GetRandomChars(_nonAlphaNumChars, minNonAlphaNum, rnd))
      selectedChars.AddRange(GetRandomChars(_digitChars, minDigits, rnd))
      selectedChars.AddRange(GetRandomChars(_allPswChars, (length - minNonAlphaNum - minDigits), rnd))
      psw = ""
      For i As Integer = 1 To selectedChars.Count
         rndSelectedChar = rnd.Next(0, selectedChars.Count)
         psw &= selectedChars(rndSelectedChar)
         selectedChars.RemoveAt(rndSelectedChar)
      Next
      Return psw
   End Function

   Private Function GetSeed() As Integer
      Dim guidString As String
      guidString = Guid.NewGuid().ToString("N").Substring(0, 5)
      Return Int32.Parse(guidString, Globalization.NumberStyles.HexNumber)
   End Function

   Private Function GetRandomChars(charRange As Char(), count As Integer, rnd As Random) As List(Of Char)
      Dim retVal As New List(Of Char),
          selectedPos As Integer

      If count < 1 Then Return retVal
      For i As Integer = 1 To count
         selectedPos = rnd.Next(0, charRange.Length)
         retVal.Add(charRange(selectedPos))
      Next

      Return retVal
   End Function
End Module

GetSeed()함수 없이이 코드를 사용하면 루프에서 암호를 생성하면 동일한 암호를 여러 번 얻을 수 있습니다. guid를 임의의 시드로 사용하면 NewGuid함수 가 동일한 guid를 생성하지 않도록 보장 하기 때문에 동일한 암호를 얻지 못하도록 할 수 있습니다 . GUID를 생성하는 시스템 제공 기능은 동일한 GUID를 얻지 못하도록 보장하지만 일종의 예측 가능 (또는 다른 기능보다 예측 가능-예측 불가능)이기 때문에 암호화 환경에서 임의 값을 생성하도록 만들어지지 않았습니다.

  • 어떤 식 으로든 내 코드를 변경하는 것이 좋습니다.
  • 내 문제를 해결하기위한 더 나은 대안이 있습니까?
  • 단일 무작위 객체가 GUID를 시드로 사용하는 것보다 예측하기 어렵습니까 (동일한 암호도 얻지 못하도록 보장합니다)?
존 스키트

Random이처럼 민감한 것에 전혀 사용하지 마십시오 . RNGCryptoServiceProvider대신 사용 하면 적절하게 안전한 시드를 제공합니다.

사용하는 것은 API만큼 간단하지 않습니다. Random기본적으로 바이트 만 가져 오며 잠재적으로 0이 아닌 것으로 보장되지만 더 적절한 API입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

행렬에서 고유 한 행의 행 번호 가져 오기

분류에서Dev

해시 된 암호 가져 오기 SimpleMembership

분류에서Dev

Slim Framework에서 설정 한 쿠키의 암호화 된 해시 문자열 가져 오기

분류에서Dev

알림 기호 드롭 다운의 표에서 메시지 목록을 가져오고 싶습니다.

분류에서Dev

임의 암호 생성기 Javascript가 작동하지 않음

분류에서Dev

.net에서 하이브리드 암호화 시스템 구현. 오류 지정된 키는이 알고리즘에 유효한 크기가 아닙니다.

분류에서Dev

벡터에서 고유 한 조합의 그리드 가져 오기

분류에서Dev

열의 모든 고유 값에 대한 마지막 레코드 가져 오기

분류에서Dev

MongoDb에서 고유 한 수준의 배열 필드 가져 오기

분류에서Dev

임의 암호 생성기가 필요한 문자 수보다 많은 문자를 생성하는 이유는 무엇입니까?

분류에서Dev

임의 암호 생성기 사용

분류에서Dev

임의 암호 생성기 Swift 3?

분류에서Dev

스프레드 시트에서 값을 가져 오려고 할 때 "정의되지 않음"가져 오기

분류에서Dev

스프레드 시트에서 값을 가져 오려고 할 때 "정의되지 않음"가져 오기

분류에서Dev

Bitlocker가 TPM을 사용하고 암호는 사용하지 않는 Bitlocker 드라이브 제한에서 데이터 가져 오기

분류에서Dev

경고 : 임시 주소 가져 오기

분류에서Dev

n 개의 고유 필드의 마지막 값 가져 오기

분류에서Dev

내 게시물의 ID를 무작위 (그러나 고유 한) 문자열로 가져 오기

분류에서Dev

Windows의 C : 자유 임의 포트에 바인딩하고 포트 번호 가져 오기

분류에서Dev

SQL Server의 고유 한 레코드가있는 테이블에서 가장 작은 날짜 가져 오기

분류에서Dev

열의 셀에서 연속적으로 고유 번호를 생성하기위한 vba 코드

분류에서Dev

사용자가 지정한 길이의 암호 생성기

분류에서Dev

Express EJS (노드)에서 임의의 이미지를 실행하기위한 고유 난수 생성

분류에서Dev

jquery 슬라이더를 통해 가져 오기 요청을 보내고 페이지를 다시로드 한 후 슬라이더의 값을 유지합니다.

분류에서Dev

개체 메서드를 전달하고 함수 외부에서 해당 메서드를 호출합니다. 임의 암호 생성기

분류에서Dev

RSA 암호의 블록 크기 가져 오기

분류에서Dev

필드를 기반으로 고유 한 개체의 쿼리 집합 가져 오기-Django

분류에서Dev

Powershell Object [컬렉션?] (메서드 등이 아님)의 유형을 가져 오십시오 (동의어 : 여기서 무슨 일이 일어나고 있습니까?).

분류에서Dev

하나의 고유 한 열인 Laravel로 쿼리 가져 오기

Related 관련 기사

  1. 1

    행렬에서 고유 한 행의 행 번호 가져 오기

  2. 2

    해시 된 암호 가져 오기 SimpleMembership

  3. 3

    Slim Framework에서 설정 한 쿠키의 암호화 된 해시 문자열 가져 오기

  4. 4

    알림 기호 드롭 다운의 표에서 메시지 목록을 가져오고 싶습니다.

  5. 5

    임의 암호 생성기 Javascript가 작동하지 않음

  6. 6

    .net에서 하이브리드 암호화 시스템 구현. 오류 지정된 키는이 알고리즘에 유효한 크기가 아닙니다.

  7. 7

    벡터에서 고유 한 조합의 그리드 가져 오기

  8. 8

    열의 모든 고유 값에 대한 마지막 레코드 가져 오기

  9. 9

    MongoDb에서 고유 한 수준의 배열 필드 가져 오기

  10. 10

    임의 암호 생성기가 필요한 문자 수보다 많은 문자를 생성하는 이유는 무엇입니까?

  11. 11

    임의 암호 생성기 사용

  12. 12

    임의 암호 생성기 Swift 3?

  13. 13

    스프레드 시트에서 값을 가져 오려고 할 때 "정의되지 않음"가져 오기

  14. 14

    스프레드 시트에서 값을 가져 오려고 할 때 "정의되지 않음"가져 오기

  15. 15

    Bitlocker가 TPM을 사용하고 암호는 사용하지 않는 Bitlocker 드라이브 제한에서 데이터 가져 오기

  16. 16

    경고 : 임시 주소 가져 오기

  17. 17

    n 개의 고유 필드의 마지막 값 가져 오기

  18. 18

    내 게시물의 ID를 무작위 (그러나 고유 한) 문자열로 가져 오기

  19. 19

    Windows의 C : 자유 임의 포트에 바인딩하고 포트 번호 가져 오기

  20. 20

    SQL Server의 고유 한 레코드가있는 테이블에서 가장 작은 날짜 가져 오기

  21. 21

    열의 셀에서 연속적으로 고유 번호를 생성하기위한 vba 코드

  22. 22

    사용자가 지정한 길이의 암호 생성기

  23. 23

    Express EJS (노드)에서 임의의 이미지를 실행하기위한 고유 난수 생성

  24. 24

    jquery 슬라이더를 통해 가져 오기 요청을 보내고 페이지를 다시로드 한 후 슬라이더의 값을 유지합니다.

  25. 25

    개체 메서드를 전달하고 함수 외부에서 해당 메서드를 호출합니다. 임의 암호 생성기

  26. 26

    RSA 암호의 블록 크기 가져 오기

  27. 27

    필드를 기반으로 고유 한 개체의 쿼리 집합 가져 오기-Django

  28. 28

    Powershell Object [컬렉션?] (메서드 등이 아님)의 유형을 가져 오십시오 (동의어 : 여기서 무슨 일이 일어나고 있습니까?).

  29. 29

    하나의 고유 한 열인 Laravel로 쿼리 가져 오기

뜨겁다태그

보관