重新实现mkpasswd

时间:2009-07-25 07:53:39

标签: java linux

在Linux上我习惯使用mkpasswd来生成随机密码,但在OS X上我没有这个命令。我没有每次都搜索到我的vps,而是想用Java重新实现它。我所做的是随机选择4个小写字母,2个大写字母,2个符号(/。等)和2个数字。然后我创建了一个矢量并随机播放。

你认为这是足够好的随机化吗?

6 个答案:

答案 0 :(得分:3)

如果您使用java.security.SecureRandom而不是java.util.Random,那么它可能是安全的。 SecureRandom提供“加密强伪随机数生成器(PRNG)”。即它确保种子不易被猜测,并且生成的数字具有高熵。

答案 1 :(得分:1)

是的,确实如此。如果您使用java.util.Random

  

此类的实例用于生成伪随机数流。该类使用48位种子,使用线性同余公式进行修改。 (参见Donald Knuth,“计算机程序设计的艺术”,第2卷,第3.2.1节。)

     

Random类实现的算法使用受保护的实用程序方法,该方法在每次调用时最多可提供32个伪随机生成的位。

修改

回应评论:

/**
 * Creates a new random number generator. This constructor sets
 * the seed of the random number generator to a value very likely
 * to be distinct from any other invocation of this constructor.
 */
public Random() { 
    this(++seedUniquifier + System.nanoTime()); 
}

private static volatile long seedUniquifier = 8682522807148012L;

答案 2 :(得分:1)

Mac Ports中提供了类似的pwgen命令。

答案 3 :(得分:0)

取决于熵的来源。使用您的特定语言附带的rand()或类似函数可能不安全。

在OSX上你可以使用/ dev / random。

答案 4 :(得分:0)

可能没问题,但是你应该在密码长度上允许一些随机化。

如果你的程序变得流行,那么密码长度就是公众所知的弱点。同时随机化小写的确切比例:大写:符号:数字一点。

答案 5 :(得分:0)

为什么不在OS X主机上编译mkpasswd?