質問
誰かこの 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 ランダムバイトを生成
- Base64を使用してエンコードする
SHA1 ベースの乱数生成器 (RNG) を作成し、RNG から返される次の 20 バイトを Base64 でエンコードします。
ただし、もう少しコンテキストがないと、なぜこれが行われるのかわかりません:-)。
このコードは、長さ 20 バイトの暗号的に強力な乱数を取得し、それを Base64 でエンコードします。ここには Java ライブラリ コードがたくさんあるので、VB でそれを行う方法については、あなたの推測も私の推測と同じくらい正確です。
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
byte[] bytes = new byte[20];
synchronized (random) { random.nextBytes(bytes); }
return Base64.encode(bytes);
最初の行は、 セキュアランダム クラス。このクラスは、暗号的に強力な擬似乱数ジェネレーターを提供します。
2 行目は、長さ 20 のバイト配列を宣言します。
3 行目は、2 行目で作成した配列に次の 20 ランダム バイトを読み取ります。SecureRandom オブジェクト上で同期するため、オブジェクトを使用している可能性のある他のスレッドとの競合が発生しません。このコードからは、なぜこれを行う必要があるのかは明らかではありません。
4 行目では、結果のバイト配列を Base64 でエンコードします。これはおそらく、既知の形式で送信、保存、または表示するためのものです。
基本的に上記のコードは次のとおりです。
- 安全な乱数ジェネレーターを作成します (VB については、以下のリンクを参照)
- 長さ 20 のバイト配列をランダムなバイトで埋めます。
- Base64 は結果をエンコードします (おそらく Convert.ToBase64String(...) を使用できます)。
ここでヘルプが見つかるはずです。http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx