문제
이 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를 사용하여 인코딩되어 반환됩니다.
간단히 말해서,
- 20개의 무작위 바이트 생성
- 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는 결과 바이트 배열을 인코딩합니다.이는 아마도 알려진 형식으로 전송, 저장 또는 표시하기 위한 것입니다.
기본적으로 위의 코드는 다음과 같습니다.
- 안전한 난수 생성기를 생성합니다(VB의 경우 아래 링크 참조).
- 길이가 20인 bytearray를 임의의 바이트로 채웁니다.
- Base64는 결과를 인코딩합니다(아마도 Convert.ToBase64String(...)을 사용할 수 있음)
여기에서 도움을 찾을 수 있습니다:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx