문제

이 Java 코드가 정확히 무엇을 하는지 말해 줄 수 있는 사람이 있나요?

SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] bytes = new byte[20];
synchronized (random)
{
    random.nextBytes(bytes);
}

return Base64.encode(bytes);

VB에서 이 코드를 다시 만들 수 있도록 단계별 설명이 유용할 것입니다.감사해요

도움이 되었습니까?

해결책

코드 조각을 사용하면 다음과 같은 결과를 얻을 수 있습니다.

Dim randomNumGen As RandomNumberGenerator = RNGCryptoServiceProvider.Create()
Dim randomBytes(20) As Byte
randomNumGen.GetBytes(randomBytes)
return Convert.ToBase64String(randomBytes)

다른 팁

그러면 난수 생성기(SecureRandom)가 생성됩니다.그런 다음 길이가 20바이트인 바이트 배열(byte[] 바이트)을 만들고 이를 임의의 데이터로 채웁니다.

그런 다음 BASE64를 사용하여 인코딩되어 반환됩니다.

간단히 말해서,

  1. 20개의 무작위 바이트 생성
  2. Base 64를 사용하여 인코딩

SHA1 기반 난수 생성기(RNG)를 생성한 다음 Base64는 RNG에서 반환된 다음 20바이트를 인코딩합니다.

그러나 더 많은 맥락 없이는 이것이 왜 수행되는지 말할 수 없습니다 :-).

이 코드는 길이가 20바이트인 강력한 암호화된 난수를 가져온 다음 Base64로 인코딩합니다.여기에는 많은 Java 라이브러리 코드가 있으므로 VB에서 이를 수행하는 방법에 대해서는 귀하의 추측이 내 것만큼 좋습니다.

SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] bytes = new byte[20];
synchronized (random) { random.nextBytes(bytes); }
return Base64.encode(bytes);

첫 번째 줄은 다음의 인스턴스를 생성합니다. 시큐어랜덤 수업.이 클래스는 암호화된 강력한 의사 난수 생성기를 제공합니다.

두 번째 줄은 길이가 20인 바이트 배열을 선언합니다.

세 번째 라인은 다음 20개의 임의 바이트를 라인 2에서 생성된 배열로 읽습니다.개체를 사용하고 있을 수 있는 다른 스레드와 충돌이 없도록 SecureRandom 개체에서 동기화합니다.이 코드에서는 왜 이 작업을 수행해야 하는지 명확하지 않습니다.

네 번째 줄 Base64는 결과 바이트 배열을 인코딩합니다.이는 아마도 알려진 형식으로 전송, 저장 또는 표시하기 위한 것입니다.

기본적으로 위의 코드는 다음과 같습니다.

  1. 안전한 난수 생성기를 생성합니다(VB의 경우 아래 링크 참조).
  2. 길이가 20인 bytearray를 임의의 바이트로 채웁니다.
  3. Base64는 결과를 인코딩합니다(아마도 Convert.ToBase64String(...)을 사용할 수 있음)

여기에서 도움을 찾을 수 있습니다:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top