【发布时间】:2012-07-18 07:07:04
【问题描述】:
这是密码生成器的片段:
# ...
ascstring='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHILKLMNOPQRSTUVWXYZ!#$%&()*+-; <=>?@^_`{|}~'
asclen=${#ascstring} # modulo ascstring
#...
r=$(openssl rand 100000 | sha1sum) # generates 40 hex sequence
#...
for i in {0..38..2}
do
v=${r:i:2} ; echo -n ${ascstring:$[ 0x$v % $asclen]:1}
done
echo
# ...
它使用ascstring 的各种定义,但显示的定义偶尔会导致问题。
基本上没关系:
$ ./password-gen.sh
`?OCw&a|746|SRm8b&c=
$ ./password-gen.sh
eE?R%3NdUjSpd<)wPuBV
$ ./password-gen.sh
0X8)p8hPobt$x@iGy?!I
$ ./password-gen.sh
P7LD;p<^lX1d87;{V4S$
但偶尔:
$ ./password-gen.sh
5w@$ypassword-gen.sh@)A|l`06B(50f7
如果我从ascstring 中删除*,这似乎永远不会发生。
我想知道发生了什么以及如何解决这个问题(不减少熵)?
谢谢。
【问题讨论】:
-
也许是个愚蠢的问题,但是如果不删除
*而是将其移动到 ascstring 中的第一个位置(或最后一个位置)会发生什么? -
@ another.anon.coward 感谢您的澄清
-
$[..]已弃用;请改用$((..))。