我有一个每日bash过程,需要每天使用一个新密码。
为了避免处理特殊字符,我使用两个$RANDOM
变量的乘积的MD5生成密码:
md5sum <<< $(($RANDOM * $RANDOM))
我的想法是:因为$RANDOM
生成一个0到32,767之间的随机整数,然后生成两个随机整数并将它们相乘会将搜索空间增加到32,767 ^ 2 = 1,071,711,169
我不是安全专家,所以我很好奇我的方法是否合理安全,如果没有,有什么更好的方法?
生成任意长度(例如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)它产生大写和小写。
有关安全性和urandom
与random
的讨论,请参阅以下文章:"When to use /dev/random vs /dev/urandom"。
不,这不合理安全。有几个问题: