2017-08-11 244 views
-7

編輯:對不起,我錯了帖子,我會檢查一下論壇位置更好的下一次。我選擇了一個被接受的答案,我認爲這個問題是關閉的。感謝您的有益回覆和提示!隨機種子生成

原文: 今天我需要升級到新的IOTA錢包。它沒有隨機種子生成器,所以我構建了自己的並從NetBeans運行它。你能給我你的意見嗎?它必須是81個字符長,幷包含從A到Z和數字9.沒有別的。這是整個代碼。

這是否留下什麼不安全的?從慣例的角度來看,代碼是否更清晰?

class SeedGenerator { 
    /* 
    This is a program to randomize a seed for Iota wallet 
    */ 

    public static void main(String[] args) { 
     System.out.println("*****"); 
     int seedLength = 81; 
     String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ9"; //Only characters allowed in Iota seed are A-Z and number 9 
     char[] charArray = alphabet.toCharArray(); //Turn string into array of characters to be referenced by index 
     String[] seed = new String[seedLength]; 
     System.out.print("Random wallet seed is: "); 

     for (int i = 0; i < seedLength; i++) { 
      Random newRandomNumber = new Random(); 
      int seedIndex = newRandomNumber.nextInt(alphabet.length()); //This is an array of index numbers to pull from charArray 
//   System.out.print(seedIndex + " "); //Used for testing the random character index range 
      seed[i] += charArray[seedIndex]; 
      System.out.print(charArray[seedIndex] + ""); 

     } 

     System.out.println(); 
     System.out.println("*****"); 
    } 
} 
+5

如果你的代碼是完整的,可行,你希望它審查,發佈在代碼審查來代替。 – Carcigenicate

+1

也許你可以查看https://codereview.stackexchange.com/來查看你的代碼。我會說,把你自己的密碼原語作爲第一個項目保證是不安全的。例如,您使用的是隨機,而在https://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html中似乎存在一個加密性強的隨機數生成器。爲每個循環創建一個新的Random對象可能也不可取!您還會將種子打印到標準輸出,如果有人正在俯視您的肩膀,該標誌(如果敏感)可能會很糟糕。 (這是沒有看你的代碼。) –

+1

也許看類似的問題在https://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string?rq=1。 –

回答

1

當要求審查代碼時,您應該發佈它here。但是無論如何,有更有效的方法來生成隨機角色。

一種這樣的方法是產生65和90之間的隨機字符,用於在ASCII table A-Z的十進制值。然後,只需將該值作爲char來獲得與該數字對應的實際字母。但是,你說,你想也包括9號,這樣可以延長這91,如果你得到91個,其中在ASCII表[,加上9號到您的字符串,而不是說。

該代碼可以完成該操作很容易:

String mySeed = ""; 
     for(int i=0; i<81; i++) 
     { 
     int randomNum = (int)(Math.random()*27) + 65; 
     if(randomNum==91) 
      mySeed+="9"; 
     else 
      mySeed+=(char)randomNum; 
     } 
     System.out.println(mySeed); 

而且,正如@ O.O提及。你可以看看生成一個安全的隨機數here