谁能告诉我这段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[] bytes),并用随机数据填充它。

然后使用 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 的字节数组
  3. Base64 对结果进行编码(您可以使用 Convert.ToBase64String(...))

您应该在这里找到一些帮助:http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top