Java从秒转换为其他测量值以某些增量失败



我正在进行一个项目,我在其中计算出brute迫使某些密码(基于Java)所花费的时间。我有工作,除非数字变得疯狂地高,它会漏出并掉下来。我认为这是由于整数的限制造成的,所以我更换了它,但它仍然发生了。奇怪的是,如果我使数字更高,则正如此GIF中所示,它可以正常工作:https://gyazo.com/7c50600acc5b0f03ff3634d49f85c9ef

这是计算它的代码:

int pwLength = password.length();
totalChars = upperChar + lowerChar + intChar + specialChar;
float combinations = pow(totalChars, pwLength);
String bruteForceFinal = "";
float keysPerSec = 15050850.21;
float bruteForceTime  = combinations/keysPerSec;
if(bruteForceTime >= 1)
{
  long seconds = floor((bruteForceTime) % 60);
  long minutes = floor((bruteForceTime / (60)) % 60);
  long hours = floor((bruteForceTime / (60 * 60)) % 24);
  long days = floor((bruteForceTime / (60 * 60 * 24)) % 30);
  long months = floor((bruteForceTime / (60 * 60 * 24 * 30)) % 12);
  long years = floor((bruteForceTime / (60 * 60 * 24 * 30 * 12)));
if((years == 0) && (months != 0))
  {
    bruteForceFinal = (months + " Months " + days + " Days " + hours + " Hours " + minutes + " Minutes " + seconds + " Seconds ");
  } else if((months == 0) && (days != 0))
  {
    bruteForceFinal = (days + " Days " + hours + " Hours " + minutes + " Minutes " + seconds + " Seconds ");
  } else if((days == 0) && (hours != 0))
  {
    bruteForceFinal = (hours + " Hours " + minutes + " Minutes " + seconds + " Seconds ");
  } else if((hours == 0) && (minutes != 0))
  {
    bruteForceFinal = (minutes + " Minutes " + seconds + " Seconds ");
  } else if((minutes == 0) && (seconds != 0))
  {
    bruteForceFinal = (seconds + " Seconds ");
  } else 
  {
    bruteForceFinal = (years + " Years " + months + " Months " + days + " Days " + hours + " Hours " + minutes + " Minutes " + seconds + " Seconds ");
  }
} else if((bruteForceTime < 1) && (bruteForceTime > 0.001))
{
  bruteForceFinal = (round(bruteForceTime * 1000) + " Milliseconds");
}
else
{
  bruteForceFinal = "Less than a millisecond";
}

我已经尝试了一些不同的解决方案,但是它似乎很奇怪,因为它不能以一个增量作用,但下一个可以起作用。

您的问题是,在您的条件逻辑中。您假设,例如,例如,月== 0 ,那么您谈论的是一个比一个月短的数量。但是总时间可能涉及多年,但是月份可能以 0 的形式出现。我认为这就是为什么您会看到明显的随机性。

我尽力而为地重现了您的结果,并看到了不良行为。然后我拿出所有条件始终打印所有数量,然后得到:

0 Years 0 Months 0 Days 0 Hours 4 Minutes 6 Seconds 
0 Years 0 Months 0 Days 5 Hours 36 Minutes 38 Seconds 
4 Years 4 Months 11 Days 22 Hours 34 Minutes 8 Seconds 
358 Years 0 Months 19 Days 2 Hours 24 Minutes 28 Seconds 
29360 Years 4 Months 7 Days 8 Hours 56 Minutes 44 Seconds 
2407548 Years 10 Months 18 Days 16 Hours 28 Minutes 28 Seconds 
197419008 Years 0 Months 0 Days 0 Hours 24 Minutes 12 Seconds 
16188359680 Years 0 Months 2 Days 0 Hours 16 Minutes 20 Seconds 

我认为结果中的所有零量都使用错误的打印呼叫导致您的代码。我无法确定,因为我没有确切的角色计数。

简而

最新更新