2018CTF大賽學習

1.C僞隨機數,可預測,可用來作加密解密,如git

int main() 
{ 
    // This program will create same sequence of  
    // random numbers on every program run  
    for(int i = 0; i<43; i++) 
        printf(" %d ", rand()%48); 
    return 0; 
} 
而執行後的結果竟然是固定的:
>$ ./seed 
 7  22  9  19  17  31  10  12  9  13  26  43  2  43  35  22  12  18  4  40  11  8  39  45  38  26  14  19  19  31  41  42  6  18  29  39  1  40  19  10  21  45  21


### 加密算法實現
> flag:Flag:{0b172e75-18a0-4d06-a8ec-421775ac12f9}
> key:!#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}

根據c的僞隨機能夠預測,按位加密flag:**key[rand() % keysize]*flag[i]%256**

引用一篇文章介紹僞隨機數:github

srand(unsigned(time(NULL))); //隨機種子算法

int rand_number = rand(); //得到隨機數數組

這裏主要涉及到了三個函數,srand(),rand()和time()。dom

不知道這三個函數是作什麼的?MSDN文檔中解釋了這三個函數的做用:函數

srand():Sets the starting seed value for the pseudorandom number generator(設置僞隨機數生成器的起始種子值)。網站

它的搭檔rand():Generates a pseudorandom number(生成一個僞隨機數)。加密

而time()的解釋就更簡單了:Get the system time(得到系統時間)。code

這三個函數組合在一塊兒,就能夠生成隨機數。事件

細心的同窗可能會發現這裏有一個特殊的詞-僞隨機數。那麼什麼是僞隨機數呢?

關於僞隨機數的概念我就很少說了,你們自行搜索一下就有不少解釋,在這裏我只說一下本身的理解:

先說一下真隨機,真隨機也就是咱們平常說的隨機,一個隨機事件的結果是不肯定的,好比拋硬幣,在正常狀況下,拋硬幣的結果是不肯定的,換句話說,結果是不可預測的。

而後說說僞隨機,僞隨機是計算機生成隨機數的一種方式,計算機不能真正模仿隨機事件,而只能經過計算來生成隨機數。換句話說,若是咱們知道了計算機計算隨機數的算法,咱們是能夠預測僞隨機數的。

固然咱們得用例子說話。

從上面的討論咱們能夠知道,由於rand()產生的數字是僞隨機數,因此它必定有一個固定的算法來生成僞隨機數,那麼算法是固定的,不固定的只有srand()所設置的種子了。

肯定了這一點以後,咱們就能夠作實驗驗證咱們的猜測了。

若是srand()設定的種子是一個固定值會發生什麼?

srand(1);

int rand_number = rand();

在我執行了N次以後,結果都是固定的。(你們能夠親自試一試)

這就說明咱們的「隨機數」就是經過某種算法計算出來的結果,因此要想這個結果發生變化,就須要設定一個不斷變化的「種子」。

那麼這裏也就解釋了「種子」的做用-用來給隨機數生成器提供一個輸入,以後隨機數生成器就會使用這個「種子」生成不一樣的僞隨機數。

舉個栗子~

若是咱們的隨機數生成算法是這樣的:

rand=1+x;

那麼咱們的「種子」就是上式中的x,,每當咱們輸入不一樣的x,產生的結果rand也就會不一樣。

至於爲何選擇time()做爲「種子」嘛,上面說了,這個函數呢,用來獲取系統時間,由於系統時間是一直在變化的,就至關於咱們隨機數的「種子」是在一直變化的,因此每次調用time()函數,都會得到不一樣的值,這樣咱們的rand()每次生成的結果也就不同啦~

最後總結一下這三個函數在生成僞隨機數的時候是怎麼配合的。

首先,time()獲取了系統時間;而後,srand()把獲取到的系統時間設置爲rand()的「種子」;最後,由rand()經過計算,把「種子」轉換爲一個數字。

好啦,這篇文章就寫到這裏了~

歡迎你們訪問個人網站:https://bfss.github.io/,若是以爲個人文章幫到了您,能夠在網站上點擊「支持我」對我進行鼓勵喲~(手機端網頁在左上角,電腦端網頁在右上角)

做者:北方素素

https://www.bilibili.com/read/cv311534

 

2.隱寫術,載荷對信號幾乎無影響,跟噪聲沒法區分。

相關文章
相關標籤/搜索