자바 랜덤값 추출에관한질문좀합니다
자바에서 제공하는 랜덤 값을 추출 할수 있는 라이브러리를 제외하고 순수 코드로 랜덤한(규칙성 없이) 정수형값을 뽑을수 있나요?
왜 랜덤수를 뽑아 만들려고 하시는지요? 이것은 매우 안좋은 방법과 생각입니다.
랜덤수를 만들떄 TRNG(True Random Number Generator)를 사용해야 안전한 랜덤수를 만들 수 있습니다. 랜덤수가 예측이 가능하다면 해커에 의해 또는 타의에 의해 랜덤수를 알아챌 수 있습니다.
그래서 자바에서는 보안 ㄹ내점 수를 생성하는데 JCA를 통해서 제공하고 있습니다.
관련된 글을 네이버 D2에 잘 정리된 글이 있어 링크를 합니다.
링크 : https://d2.naver.com/helloworld/197937
다른 방법으로 안전한 랜덤수를 만드는 방법은 인텔에서 제공하는 DRNG(Digital Random Number Generator)를 사용하는 것입니다. 보통 i5 급 cpu는 다 해당 기능을 제공하고 있으며 자바에서 호출하는 api를 만들어서 사용하면 됩니다.
인텔 DRNG 링크는 다음과 같습니다. https://software.intel.com/en-us/articles/intel-digital-random-number-generator-drng-software-implementation-guide
자바 TRNG 샘플 코드는 Github에 있으니 참고해서 배워보세요.
링크 https://github.com/sanbrother/java-TRNG-client/blob/master/TestTRNG.java
윗분이 말씀하신데로 , 기본적으로 제공하는 명령어코드가 최적의 코드라고 보시면 됩니다
그 이유는 버전업이 되면서 문제가 되는 부분들은 체크되어 삭제되고 업데이트 되기때문에
정말로 진짜로 새로이 만들어야 하는 내용이 아니라면 그냥 있는 명령어 사용하시면 됩니다
또는 랜덤이지만 편향성 있는 랜덤값을 출력을 해야 한다면,
랜덤명령을 여러번 조합하므로써 가능은 합니다.
예를 들어 1~10까지의 랜덤을 발생시키는데
7~10까지의 랜덤을 가중치를 두어 발생시키고 싶다면?
아래 알고리즘으로 만드시면 됩니다
1에서 10까지의 난수를 2번 발생시켜서 a,b 에 저장을 합니다
a 와 b 중에서 7-10 사이의 숫자가 있다면 그 변수를 사용합니다
없다면? 그냥 a변수에 있는 값을 사용을 합니다
대충 이정도면 7-10에 1번 더 가중치를 준것이므로 확율적으로 7-10이 나올 가능성이 많이있습니다