JavaTM Platform
Standard Ed. 6

java.security
클래스 SecureRandom

java.lang.Object 
  상위를 확장 java.util.Random 
      상위를 확장 java.security.SecureRandom
모든 구현된 인터페이스:
Serializable


public class SecureRandom
extends Random

이 클래스는 암호용으로 강화된 난수 제네레이터 (RNG)를 제공합니다.

강력한 암호화에 의한 난수는,「FIPS 140-2, Security Requirements for Cryptographic Modules」 의 섹션 4.9. 1 으로 지정되고 있는 통계적 난수 생성 테스트에 최저한 적합하고 있습니다. 또, SecureRandom 는 순서 부정으로 출력을 실시할 필요가 있습니다. 이 때문에, SecureRamdom 객체에게 건네지는 모든 배정 소재가 예측 불가능해, SecureRandom 의 모든 출력 순서가「RFC 1750: Randomness Recommendations for Security」에 기술되고 있는 대로, 강력하게 암호화되고 있을 필요가 있습니다.

호출측은, 인수 없음의 생성자 인가, 임의의 getInstance 메소드를 사용해, SecureRandom 인스턴스를 가져옵니다.

SecureRandom random = new SecureRandom();
 

많은 SecureRandom 구현은 의사 난수 제네레이터 (PRNG)의 형식입니다. 이것은, 특정의 결정성 알고리즘을 사용해 진정한 난수 배정으로부터 의사 난수 순서를 생성하는 것을 의미합니다. 구현안에는, 진정한 난수를 생성하는 것도 있으면, 양쪽 모두의 기술의 편성을 사용하는 것도 있습니다.

SecureRandom 의 일반적인 호출측은, 다음의 메소드를 호출해 랜덤 바이트를 가져옵니다.

SecureRandom random = new SecureRandom();
byte bytes[] = new byte[20];
random.nextBytes(bytes);
 

호출측은, 다음의 예의 같게 generateSeed 메소드를 호출해, 지정된 수의 배정 바이트를 생성할 수도 있습니다. 생성된 배정 바이트는, 예를 들어 다른 난수 제네레이터를 배정 하기 위해서 사용합니다.

byte seed[] = random.generateSeed(20);
 

관련 항목:
SecureRandomSpi , Random , 직렬화 된 형식

생성자 의 개요
  SecureRandom ()
          디폴트의 난수 알고리즘을 구현하는, 시큐리티 보호된 난수 제네레이터 (RNG)를 구축합니다.
  SecureRandom (byte[] seed)
          디폴트의 난수 알고리즘을 구현하는, 시큐리티 보호된 난수 제네레이터 (RNG)를 구축합니다.
protected SecureRandom (SecureRandomSpi  secureRandomSpi, Provider  provider)
          SecureRandom 객체를 작성합니다.
 
메소드의 개요
 byte[] generateSeed (int numBytes)
          지정된 바이트수의 배정 바이트를 돌려줍니다.
 String getAlgorithm ()
          이 SecureRandom 객체가 구현하고 있는 알고리즘의 이름을 돌려줍니다.
static SecureRandom getInstance (String  algorithm)
          지정된 난수 제네레이터 (RNG) 알고리즘을 구현한 SecureRandom 객체를 돌려줍니다.
static SecureRandom getInstance (String  algorithm, Provider  provider)
          지정된 난수 제네레이터 (RNG) 알고리즘을 구현한 SecureRandom 객체를 돌려줍니다.
static SecureRandom getInstance (String  algorithm, String  provider)
          지정된 난수 제네레이터 (RNG) 알고리즘을 구현한 SecureRandom 객체를 돌려줍니다.
 Provider getProvider ()
          이 SecureRandom 객체의 프로바이더를 돌려줍니다.
static byte[] getSeed (int numBytes)
          지정된 바이트수의 배정 바이트를 돌려줍니다.
protected  int next (int numBits)
          사용자가 지정한 수의 의사 난수 비트 (right justify, 제로 매입)를 포함한 정수를 생성합니다.
 void nextBytes (byte[] bytes)
          사용자가 지정한 바이트수의 난수 바이트수를 생성합니다.
 void setSeed (byte[] seed)
          난수 객체를 재배정 합니다.
 void setSeed (long seed)
          지정된 long seed 에 포함되어 있는 8 바이트를 사용해, 이 난수 객체를 재배정 합니다.
 
클래스 java.util. Random 로부터 상속된 메소드
nextBoolean , nextDouble , nextFloat , nextGaussian , nextInt , nextInt , nextLong
 
클래스 java.lang. Object 로부터 상속된 메소드
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
 

생성자 의 상세

SecureRandom

public SecureRandom()
디폴트의 난수 알고리즘을 구현하는, 시큐리티 보호된 난수 제네레이터 (RNG)를 구축합니다.

이 생성자 은, 최우선의 Provider 로부터 순서에, 등록을 마친 시큐리티 Provider 의 리스트를 횡단(traverse) 합니다. SecureRandom (RNG) 알고리즘을 지원하는 최초의 Provider 의 SecureRandomSpi 구현을 캡슐화하는 새로운 SecureRandom 객체가 돌려주어집니다. RNG 알고리즘을 지원하는 Provider 가 존재하지 않는 경우, 구현 고유의 디폴트 값가 돌려주어집니다.

등록이 끝난 프로바이더의 리스트는,Security.getProviders() 메소드 경유로 취득할 수 있습니다.

RNG 알고리즘의 표준적인 이름에 대해서는,「Java 암호화 아키텍쳐(architecture) API 의 스펙 및 레퍼런스」의 부록 A 를 참조해 주세요.

배정되어 있지 않은 SecureRandom 객체가 돌려주어집니다. 반환된 객체를 배정 하려면 ,setSeed 메소드를 호출합니다. setSeed 가 불려 가지 않았던 경우, 최초로 nextBytes 메소드를 호출했을 때에, SecureRandom 객체가 강제적으로 배정 됩니다. setSeed 가 이전에 불려 가고 있는 경우, 이 자기 배정은 행해지지 않습니다.


SecureRandom

public SecureRandom(byte[] seed)
디폴트의 난수 알고리즘을 구현하는, 시큐리티 보호된 난수 제네레이터 (RNG)를 구축합니다. SecureRandom 인스턴스는, 지정의 배정 바이트로 배정 됩니다.

이 생성자 은, 최우선의 Provider 로부터 순서에, 등록을 마친 시큐리티 Provider 의 리스트를 횡단(traverse) 합니다. SecureRandom (RNG) 알고리즘을 지원하는 최초의 Provider 의 SecureRandomSpi 구현을 캡슐화하는 새로운 SecureRandom 객체가 돌려주어집니다. RNG 알고리즘을 지원하는 Provider 가 존재하지 않는 경우, 구현 고유의 디폴트 값가 돌려주어집니다.

등록이 끝난 프로바이더의 리스트는,Security.getProviders() 메소드 경유로 취득할 수 있습니다.

RNG 알고리즘의 표준적인 이름에 대해서는,「Java 암호화 아키텍쳐(architecture) API 의 스펙 및 레퍼런스」의 부록 A 를 참조해 주세요.

파라미터:
seed - 배정

SecureRandom

protected SecureRandom(SecureRandomSpi  secureRandomSpi,
                       Provider  provider)
SecureRandom 객체를 작성합니다.

파라미터:
secureRandomSpi - SecureRandom 의 구현
provider - 프로바이더
메소드의 상세

getInstance

public static SecureRandom  getInstance(String  algorithm)
                                throws NoSuchAlgorithmException 
지정된 난수 제네레이터 (RNG) 알고리즘을 구현한 SecureRandom 객체를 돌려줍니다.

이 메소드는, 최우선의 Provider 로부터 순서에, 등록을 마친 시큐리티 Provider 의 리스트를 횡단(traverse) 합니다. 지정된 알고리즘을 지원하는 최초의 Provider 의 SecureRandomSpi 구현을 캡슐화하는 새로운 SecureRandom 객체가 돌려주어집니다.

등록이 끝난 프로바이더의 리스트는,Security.getProviders() 메소드 경유로 취득할 수 있습니다.

배정되어 있지 않은 SecureRandom 객체가 돌려주어집니다. 반환된 객체를 배정 하려면 ,setSeed 메소드를 호출합니다. setSeed 가 불려 가지 않았던 경우, 최초로 nextBytes 메소드를 호출했을 때에, SecureRandom 객체가 강제적으로 배정 됩니다. setSeed 가 이전에 불려 가고 있는 경우, 이 자기 배정은 행해지지 않습니다.

파라미터:
algorithm - RNG 알고리즘의 이름. RNG 알고리즘의 표준적인 이름에 대해서는,「Java 암호화 아키텍쳐(architecture) API 의 스펙 및 레퍼런스」의 부록 A 를 참조해 주세요.
반환값:
신규 SecureRandom 객체
예외:
NoSuchAlgorithmException - 지정된 알고리즘의 SecureRandomSpi 구현을 지원하는 Provider 가 존재하지 않는 경우
도입된 버젼:
1.2
관련 항목:
Provider

getInstance

public static SecureRandom  getInstance(String  algorithm,
                                       String  provider)
                                throws NoSuchAlgorithmException ,
                                       NoSuchProviderException 
지정된 난수 제네레이터 (RNG) 알고리즘을 구현한 SecureRandom 객체를 돌려줍니다.

지정된 프로바이더의 SecureRandomSpi 구현을 캡슐화하는 새로운 SecureRandom 객체가 돌려주어집니다. 지정한 프로바이더는, 시큐리티 프로바이더 리스트에 등록할 필요가 있습니다.

등록이 끝난 프로바이더의 리스트는,Security.getProviders() 메소드 경유로 취득할 수 있습니다.

배정되어 있지 않은 SecureRandom 객체가 돌려주어집니다. 반환된 객체를 배정 하려면 ,setSeed 메소드를 호출합니다. setSeed 가 불려 가지 않았던 경우, 최초로 nextBytes 메소드를 호출했을 때에, SecureRandom 객체가 강제적으로 배정 됩니다. setSeed 가 이전에 불려 가고 있는 경우, 이 자기 배정은 행해지지 않습니다.

파라미터:
algorithm - RNG 알고리즘의 이름. RNG 알고리즘의 표준적인 이름에 대해서는,「Java 암호화 아키텍쳐(architecture) API 의 스펙 및 레퍼런스」의 부록 A 를 참조
provider - 프로바이더명
반환값:
신규 SecureRandom 객체
예외:
NoSuchAlgorithmException - 지정된 프로바이더로 지정된 알고리즘의 SecureRandomSpi 구현이 없는 경우
NoSuchProviderException - 지정된 프로바이더가 시큐리티 프로바이더 리스트에 등록되지 않은 경우
IllegalArgumentException - 프로바이더의 이름이 null 나 빈 상태(empty)의 경우
도입된 버젼:
1.2
관련 항목:
Provider

getInstance

public static SecureRandom  getInstance(String  algorithm,
                                       Provider  provider)
                                throws NoSuchAlgorithmException 
지정된 난수 제네레이터 (RNG) 알고리즘을 구현한 SecureRandom 객체를 돌려줍니다.

지정된 Provider 객체의 SecureRandomSpi 구현을 캡슐화하는 새로운 SecureRandom 객체가 돌려주어집니다. 지정된 Provider 객체는, 프로바이더 리스트에 등록할 필요는 없습니다.

배정되어 있지 않은 SecureRandom 객체가 돌려주어집니다. 반환된 객체를 배정 하려면 ,setSeed 메소드를 호출합니다. setSeed 가 불려 가지 않았던 경우, 최초로 nextBytes 메소드를 호출했을 때에, SecureRandom 객체가 강제적으로 배정 됩니다. setSeed 가 이전에 불려 가고 있는 경우, 이 자기 배정은 행해지지 않습니다.

파라미터:
algorithm - RNG 알고리즘의 이름. RNG 알고리즘의 표준적인 이름에 대해서는,「Java 암호화 아키텍쳐(architecture) API 의 스펙 및 레퍼런스」의 부록 A 를 참조
provider - 프로바이더
반환값:
신규 SecureRandom 객체
예외:
NoSuchAlgorithmException - 지정된 Provider 객체로 지정된 알고리즘의 SecureRandomSpi 구현이 없는 경우
IllegalArgumentException - 지정된 프로바이더가 null 의 경우
도입된 버젼:
1.4
관련 항목:
Provider

getProvider

public final Provider  getProvider()
이 SecureRandom 객체의 프로바이더를 돌려줍니다.

반환값:
이 SecureRandom 객체의 프로바이더

getAlgorithm

public String  getAlgorithm()
이 SecureRandom 객체가 구현하고 있는 알고리즘의 이름을 돌려줍니다.

반환값:
알고리즘의 이름. 알고리즘명을 특정할 수 없는 경우는 unknown
도입된 버젼:
1.5

setSeed

public void setSeed(byte[] seed)
난수 객체를 재배정 합니다. 주어진 배정은, 기존의 배정과 옮겨지는 것이 아니라, 기존의 배정에 추가됩니다. 이것에 의해, 호출을 반복해도, 랜덤성이 감소하지 않는 것이 보증됩니다.

파라미터:
seed - 배정
관련 항목:
getSeed(int)

setSeed

public void setSeed(long seed)
지정된 long seed 에 포함되어 있는 8 바이트를 사용해, 이 난수 객체를 재배정 합니다. 주어진 배정은, 기존의 배정과 옮겨지는 것이 아니라, 기존의 배정에 추가됩니다. 이것에 의해, 호출을 반복해도, 랜덤성이 감소하지 않는 것이 보증됩니다.

이 메소드는,java.util.Random 와의 호환성을 위해서(때문에) 정의되고 있습니다.

오버라이드(override):
클래스 Random 내의 setSeed
파라미터:
seed - 배정
관련 항목:
getSeed(int)

nextBytes

public void nextBytes(byte[] bytes)
사용자가 지정한 바이트수의 난수 바이트수를 생성합니다.

setSeed 가 이전에 불려 갔던 적이 없는 경우는, 이 메소드를 최초로 호출했을 때, 이 SecureRandom 객체가 강제적으로 배정 됩니다. setSeed 가 이전에 불려 가고 있는 경우, 이 자기 배정은 행해지지 않습니다.

오버라이드(override):
클래스 Random 내의 nextBytes
파라미터:
bytes - 난수 바이트를 충전하는 배열

next

protected final int next(int numBits)
사용자가 지정한 수의 의사 난수 비트 (right justify, 제로 매입)를 포함한 정수를 생성합니다. 이 메소드는,java.util.Random 메소드를 오버라이드(override) 해, 그 클래스 (예를 들어,nextInt,nextLong, 및 nextFloat)로부터 상속하는 메소드의 모두에게 난수 비트의 발생원을 제공하는데 도움이 됩니다.

오버라이드(override):
클래스 Random 내의 next
파라미터:
numBits - 0 <= numBits <= 32 의 경우, 생성하는 의사 난수 비트의 수
반환값:
사용자 지정의 의사 난수 비트 (right justify, 선두에 제로 매입)를 포함한 int

getSeed

public static byte[] getSeed(int numBytes)
지정된 바이트수의 배정 바이트를 돌려줍니다. 배정 바이트의 계산에는, 이 클래스가 자신을 배정 하는데 사용하는 배정 생성 알고리즘이 사용됩니다. 이 호출을 사용하면(자), 다른 난수 제네레이터를 배정 할 수 있습니다.

이 메소드는, 하위 호환 (을) 위해서만 제공되고 있습니다. 호출측으로부터는, 대체의 getInstance 메소드 가운데 1 개를 사용해 SecureRandom 객체를 취득한 곧 나중에,setSeed 메소드를 호출해 그 객체로부터 배정 바이트를 취득하는 것을 추천합니다.

파라미터:
numBytes - 생성하는 배정 바이트수
반환값:
배정 바이트
관련 항목:
setSeed(byte[])

generateSeed

public byte[] generateSeed(int numBytes)
지정된 바이트수의 배정 바이트를 돌려줍니다. 배정 바이트의 계산에는, 이 클래스가 자신을 배정 하는데 사용하는 배정 생성 알고리즘이 사용됩니다. 이 호출을 사용하면(자), 다른 난수 제네레이터를 배정 할 수 있습니다.

파라미터:
numBytes - 생성하는 배정 바이트수
반환값:
배정 바이트

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.