Linux bash生成没有特殊字符的安全密码

Linux bash生成没有特殊字符的安全密码,linux,bash,security,random,passwords,Linux,Bash,Security,Random,Passwords,我有一个每日bash过程,需要每天使用一个新密码 为了避免处理特殊字符,我使用两个$RANDOM变量乘积的MD5生成密码: md5sum <<< $(($RANDOM * $RANDOM)) 我的想法是:由于$RANDOM生成一个介于0和32767之间的随机整数,因此生成两个随机整数并将其相乘会将搜索空间增加到32767^2=1071711169 我不是安全专家,因此我很好奇我的方法是否合理安全,如果不安全,有什么更好的方法?生成任意所需长度(例如20个字符)的密码的安全方法

我有一个每日bash过程,需要每天使用一个新密码

为了避免处理特殊字符,我使用两个$RANDOM变量乘积的MD5生成密码:

md5sum <<< $(($RANDOM * $RANDOM))
我的想法是:由于$RANDOM生成一个介于0和32767之间的随机整数,因此生成两个随机整数并将其相乘会将搜索空间增加到32767^2=1071711169


我不是安全专家,因此我很好奇我的方法是否合理安全,如果不安全,有什么更好的方法?

生成任意所需长度(例如20个字符)的密码的安全方法是:

cat /dev/random | tr -dc '[:alnum:]' | head -c 20
如果/dev/random对于您的口味来说太慢,那么下面的代码很快,而且可能已经足够好了:

cat /dev/urandom | tr -dc '[:alnum:]' | head -c 20
与md5sum相比,这具有优势,因为a使用所有字母字符,而不仅仅是a-f,而b使用大写和小写


有关安全性和Uradom与random的讨论,请参阅以下帖子:。

不,这是不合理的安全。有几个问题:

Bash使用一个简单的线性随机数生成器,因此它不是强随机数 Bash使用一天中的时间和pid为这个生成器进行种子设定,因此,如果您知道密码是在哪一年生成的,那么您的搜索空间已经减少了很多。 将0..n中的两个数字相乘不会给出n^2的可能性,因为1*16=2*8=4*4=8*2=16*1。一个快速程序显示,对于两个数字0..32768,您有232483839个可能的产品。 即使你解决了这个问题,并且得到了1071711169个可能的密码,这只相当于5个字母数字字符,如果有人知道你的密码生成方案,可能会很快被破解。