找到11512个回复
优化挑选的方法:
dd if=/dev/urandom bs=256 count=1 2>/dev/null | grep -aoE '[A-Za-z0-9!@#%^&*/(){}<>~]*' | tr -d '\n' | cut -b 1-24
挑选法一定会产生足够长的字符串吗?
不一定。
有极小概率产生的字符串不够长,原因显而易见:产生的随机字节中的大部分都不符合要求。
但是只要产生的字节够多,远比最后需要的多,那出现该问题的概率就无限接近于0,以至于可以忽略。
当然,如果你想确保产生足够长的字符串,你可以写一个循环进行检测,这用shell完全能做到。
关于
/dev/random和/dev/urandom:前者生成的随机字节很安全,不容易被预测,但会耗尽,所以一次只能读取几个字节。如果一次读取很多字节,可能需要等很久才能完成,或者干脆完不成(读取不到指定长度)。
后者生成的随机字节没有前者那么安全,存在被预测的可能性(可能性很小),但可以无限生成。所以要生成大量随机字节时通常用后者。
详细介绍:
shell 应该也能生成随机数吧
纯 shell 做不到吗