我在我的android客戶端以及服務器(Servlet)中得到一個隨機數。我在客戶端和服務器端都使用相同的SecureRandom算法(「SHA1PRNG」)。我的種子價值都相同。但是我得到的輸出數字在客戶端和服務器端都是不同的。這可能是什麼原因呢?這裏是我的代碼:算法在SecureRandom號碼
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();
}
我在Android中使用了安全的randon數生成器,並使用相同的種子實例兩次,我得到了相同的隨機數兩次。當我在Servlet中做同樣的事情時,我得到了兩個相同的隨機數字,用於兩個相同的種子。但問題是隨機數** Android不等於servlet中的隨機數** – suraj 2012-03-12 04:52:40
在Android平臺和您的servlet使用的JDK上的實現可能略有不同。但我的觀點仍然是:使用一個類,通過契約,應該儘可能安全地生成數字,以便在幾個不同的平臺上獲得可預測的數字序列,這不是一個好主意。嘗試使用自己的算法,通過契約,生成一個給定種子的可預測序列,或者在一側生成數字,並與另一側分享它們。 – 2012-03-12 08:02:37
好的。我會考慮它。非常感謝。你真棒 – suraj 2012-03-12 08:34:27