java - SecureRandom 数字中的算法

标签 java android servlets random

我在我的 android 客户端和服务器(Servlet)中得到一个随机数。我在客户端和服务器中使用相同的 SecureRandom 算法(“SHA1PRNG”)。我的种子值对于两者都是相同的。但是我得到的输出数字在客户端和服务器中都是不同的。可能是什么原因?这是我的代码:

SecureRandom random = new SecureRandom();
try {
    random.getInstance("SHA1PRNG");
} catch (Exception e) {
    // ...
}
;
random.setSeed(1097327);
byte[] b1 = new byte[3];
random.nextBytes(b1);
long value = 0;
for (int i = 0; i < b1.length; i++) {
    value += (b1[i] & 0xff) << (8 * i);
    Toast.makeText(getApplicationContext(), Long.toString(value),
            Toast.LENGTH_LONG).show();
}

最佳答案

SecureRandom 的 javadoc 说:

Many SecureRandom implementations are in the form of a pseudo-random number generator (PRNG), which means they use a deterministic algorithm to produce a pseudo-random sequence from a true random seed. Other implementations may produce true random numbers, and yet others may use a combination of both techniques.

也许该算法使用另一个随机源来生成随机数。这样做不会破坏 SecureRandom 类的约定。它甚至会更加满足它,因为安全随机生成器的目标是生成随机数,而不是可预测的数字序列。

关于java - SecureRandom 数字中的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647066/

相关文章:

java - 数组列表 : Find nth occurrence of an Integer

servlets - 如何使用 servlet 从上一个 html 页面获取值到下一个页面?

java - 将信息从 Java (Servlet) 传递到 CGI 方法?

Java awt swing,带计时器的启动/停止按钮

java - 如何解释 parasolid x_t 文件以便在 Java 中创建导入器

java - 如何计算基于结构的字符串相似度?

android - Android 谷歌地图问题的自定义 InfoWindow

android - 如果我使用单例,在哪里关闭 SQLiteOpenHelper

android - 以编程方式将按钮添加到线性布局的底部

java - 将 Scala 集成到 Java 中的现有项目中