본문으로 바로가기

임시 비밀번호 생성 로직

category 컴퓨터/웹프로그래밍 2016. 6. 10. 14:01
HR index 2.0
안녕하세요? QRD입니다.

오늘은 임시비밀번호를 생성하는 로직을 소개해보려 합니다.

물론 임시비밀번호를 생성하는 로직은 많은 방법이 있겠지만,
그 중 2개의 방법을 소개해볼까 합니다.
바로 UUID배열을 이용한 방법인데요
UUID를 이용하면 로직이 간단한 장점이 있지만, 숫자와 영어(소문자)만을 조합하여 임시비밀번호가 생성되는 단점이 있습니다.
반면, 배열을 이용하면 로직은 다소 길어지지만 숫자와 영어, 특수문자까지 조합하여 임시 비밀번호를 생성할 수 있습니다.
그렇다면 어떻게 하는지 한 번 알아볼까요?!

UUID는 유니버셜한 ID를 만드는 표준기술입니다.
또 다른 말로는 범용 고유 번호라고 불리며 128 비트의 숫자와 영어(소문자)의 조합으로 만들어 집니다.
주의할 점은 JAVA 1.5 이상 버전부터 지원하며 사용 방법은
UUID 클래스를 Import후, randomUUID() 함수를 통해 생성할 수 있습니다. (참조 - http://blog.naver.com/PostView.nhn?blogId=lszeelee&logNo=110100215980 블로그를 참조하세요, 정리가 잘 되어 있습니다. )
그럼 이제 임시비밀번호를 한번 생성해 볼까요?

import java.util.UUID;
  public class test {
    public static void main(String[] args) {
      for (int i = 0;i < 5; i++) {
        // UUID uuid = UUID.randomUUID() // UUID 자체는 Object 타입
        String uuid = UUID.randomUUID().toString(); // 그렇기 때문에 toString() 메서드를 이용해 String 타입으로 바꿔 줘야 함.
        System.out.println(i + ") " +uuid);
      }
    }
  }

결과
0) b633095d-21e0-4338-9804-d7ae5f3311fa
1) 43e71a55-e945-42c7-b1a1-2b29b779f1ed
2) fd5fb8f2-2e3a-446e-b223-e8a489b0a921
3) 91b787db-0946-419a-83f0-26561b264544
4) 01554889-035d-4422-95ac-721747916624

UUID은 랜덤한 32개의 '숫자' & '영어소문자' 와 구분자 '-' 로 된 36자리의 문자열 출력합니다.
총 340,282,366,920,938,463,463,374,607,431,768,211,456개의 UUID값이 존재하기 때문에 중복될 확률은 극희 희박합니다.
계산해 보니 2.93873587706e-37% 정도 나오네요.. (대략 0.0000000000000000000000000000000000000.29387.....%, )
이제 도출된 결과에서 '-'을 제거한 후 원하는 크기만큼 잘라서 사용하면 됩니다.

import java.util.UUID;
  public class test {
    public static void main(String[] args) {
      for (int i = 0; i < 5; i++) {
        String uuid = UUID.randomUUID().toString().replaceAll("-", ""); // -를 제거해 주었다.
        uuid = uuid.substring(0, 10); //uuid를 앞에서부터 10자리 잘라줌.
        System.out.println(i + ") " +uuid);
      }
    }
  }

결과
0) 14ced98e0c
1) 3a840a2691
2) c004243080
3) 0bc9e6801c
4) caa4ef0708


이런식으로 10자리 임시비밀번호를 생성할 수 있습니다.
다만 처음에 말씀드렸다 싶이, 숫자와 영어(소문자)로만 조합되 있는게 보이시죠?

그렇다면 이번에는 배열을 이용해서 임시비밀번호를 생성해 봅시다.
배열을 이용하여 숫자, 영어와 특수문자를 포함할 수 있습니다.


배열을 이용하여 임시비밀번호를 생성하는 로직은 사실 매우 단순한 알고리즘인데요..
비밀번호에 포함될 모든 문자(숫자, 영어, 특수문자)를 배열에 선언한 후 Rand() 함수를 통해 임의로 출력하여
모든 문자를 합치는 방법입니다.
소스를 한 번 볼까요?

  public class test {
    public static void main(String[] args) {
      for (int i = 0; i < 5; i++) {
        System.out.println(i +") "+randomPw());
      }
    }
    /**
    * 임의 비밀번호 10자리 생성
    * @return
    */

    public static String randomPw(){
      char pwCollection[] = new char[] {
                        '1','2','3','4','5','6','7','8','9','0',
                        'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
                        'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
                        '!','@','#','$','%','^','&','*','(',')'};//배열에 선언

      String ranPw = "";

      for (int i = 0; i < 10; i++) {
        int selectRandomPw = (int)(Math.random()*(pwCollection.length));//Math.rondom()은 0.0이상 1.0미만의 난수를 생성해 준다.
        ranPw += pwCollection[selectRandomPw];
      }
    return ranPw;
  }
}

결과
0) @CTXM5yiUv
1) SmK!zoLi5y
2) h)r(KKg4zW
3) nb%xeybOSa
4) F*nkqRBu9U

배열을 이용하여 임시비밀번호를 생성하는 방법은 위에서 보이다시피
Math.random()함수를 이용하여 나오는 난수의 값을 배열에 넣어주어
인덱스에 해당하는 배열의 값을 추출하여 문자열을 붙여주는 방법입니다.

음.... 하하 감사합니다.

'컴퓨터 > 웹프로그래밍' 카테고리의 다른 글

상태 코드(Status Code)  (0) 2016.06.26