2008-09-16 69 views
4

任何人都可以告訴我這個Java代碼究竟做了什麼?用於java代碼的等價vb代碼

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

return Base64.encode(bytes); 

一步一步的解釋將是有益的,這樣我可以重新創建VB此代碼。謝謝

回答

5

使用的代碼片段,你可以得到這樣的事情

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

這會創建一個隨機數生成器(SecureRandom)。然後它創建一個字節數組(byte [] bytes),長度爲20個字節,並用隨機數據填充它。

然後使用BASE64對其進行編碼並返回。

因此,概括地說,

  1. 生成20隨機字節使用基本64
1

  • 編碼它創建一個基於SHA1隨機數發生器(RNG),然後Base64的編碼的下一個RNG返回20個字節。

    我不能告訴你爲什麼它這樣做,但沒有更多的上下文:-)。

  • 1

    該代碼獲得長度爲20個字節的密碼強的隨機數,然後Base64對其進行編碼。這裏有很多Java庫代碼,所以你的猜測和我一樣好,以及如何在VB中做到這一點。

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

    第一行創建SecureRandom類的實例。這個類提供了一個密碼強的僞隨機數發生器。

    第二行聲明長度的字節陣列20

    第三行讀取下一個20個隨機字節到第2行它同步SecureRandom對象上創建的陣列,以便有沒有來自其他衝突線程可能正在使用該對象。從這段代碼中看不出爲什麼你需要這樣做。

    第四行Base64對結果字節數組進行編碼。這可能用於傳輸,存儲或以已知格式顯示。