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.隐写术,载荷对信号几乎无影响,跟噪声没法区分。

相关文章
相关标签/搜索