以 Bash shell 來處理亂數,排序,再把它弄亂!

Home » Bash » 以 Bash shell 來處理亂數,排序,再把它弄亂!
2016-08-28 Bash, 排序, 資料結構 尚無留言

接續前一個話題。。。關於 GnuPG 的 RNG 漏洞,如果以 Bash shell 來看,我們要如何處理亂數呢?

方法一,使用 RANDOM  變數,即 Bash 內建的 RNG:

RANDOM=$$
echo $RANDOM

 

這個方法太 low 了,來一個比較會嚇唬人的。

方法二,使用 Linux 核心提供的亂數機制:

head -1 /dev/urandom | od -N 2 | head -1 | awk '{print $2 * 1}'

 

喔,這樣看起來是不是比較有水準多了?(讓人看不懂,就是有水準?話說,學術界的爛招,不都是如此麼?!)

我們就用方法二來產生 50 個亂數,並把它排序:

for ((i=1; i<=50; i=i+1)) do 
   head -1 /dev/urandom | od -N 2 | head -1 | awk '{print $2 * 1}' >> rng.txt 
done 
cat rng.txt | sort -n > rng-sorted.txt

 

隨機取樣、排序的結果如下:

416
7167
10255
10427
15603
16413
21670
24066
24616
26126
32143
33224
37245
42532
43157
44521
45752
47347
52225
53023
54754
57454
57477
65147
72265
72560
74210
74337
75072
75516
106362
114233
114630
116303
117764
120753
125224
130032
131464
136452
145305
151467
155240
156231
160640
163325
166507
167476
172230
176322

好啦,我們人們追求的表面「秩序」(排序)已經達成了。。。

但真正的問題來了!怎樣才可以把這些資料「弄亂」??

許多時候,把資料弄得夠亂,才是我們真正需要的喔!

這裡先賣個關子,有興趣的朋友,可以試作看看。。。或許,各種創意的方法都會出現喔! 😉

 

LEAVE A COMMENT

eight  ×    =  fifty six

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料