3

パスワードジェネレータのフラグメントは次のとおりです。

# ...
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これは決して起こらないようです。何が起こっているのか、どうすればこの問題を(エントロピーを減らすことなく)回避できるのだろうか?

ありがとう。

4

1 に答える 1

5

エコーする文字列を引用する必要があります。

...
echo -n "${ascstring:$[ 0x$v % $asclen]:1}"
于 2012-07-19T06:41:02.627 に答える