我試圖實現一個隨機數生成器系統;基本上我在讀在SHA1哈希值,然後把它轉化成一個BigInteger值:將Java BigInteger縮小爲固定長度的較小數字
String start = "abc";
String hash = utils.SHA1(start); //Generates an SHA1 hash of the string
byte[] bytes = hash.getBytes();
BigInteger big = new BigInteger(bytes);
此代碼生成一個BigInteger,值爲:
811203900027758629330492243480887228261034167773619203962320290854945165232584286910163772258660
我需要以某種方式做什麼(這就是我感到困惑的地方),就是把這個數字減少到一個數量更小的數字,並且有一個固定的小數位數。
結合使用模塊化算術和Java Math API函數,是否有合理的方法將此數字降低爲3位數字。或我選擇的任何其他長度的號碼。
目前我只是簡單地將這個龐大的數字轉換爲一個字符串,然後取一個我想要的數字長度的子字符串。然而,我並不完全滿意,因爲我得到的數字並不是隨機的,因爲範圍有點侷限於3位數字。
這樣做的全部目的是爲了將新生成的隨機x位數字轉換爲一個使用36基數的字符串,還包括ASCII字母字符。
任何信息或建議將不勝感激。
謝謝!
所以你想要3位數字,但你不想要3位數字,因爲它們是有限的?我不明白... – m0skit0 2012-02-23 12:39:53
他想要x個數字 - 取決於具體情況... – DaveFar 2012-02-23 12:46:12
該整數是散列值「a9993e364706816aba3e25717850c26c9cd0d89d」的ASCII十六進制表示,所以它是需要的兩倍。谷歌搜索上面顯示,這是哈希......好吧,你可以谷歌它自己。 – 2012-02-23 12:57:58