2017-08-11 213 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