文档章节

2018CTF大赛学习

simpower
 simpower
发布于 10/22 10:53
字数 1156
阅读 28
收藏 0

1.C伪随机数,可预测,可用来做加密解密,如

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**

引用一篇文章介绍伪随机数:

srand(unsigned(time(NULL))); //随机种子

int rand_number = rand(); //获得随机数

这里主要涉及到了三个函数,srand(),rand()和time()。

不知道这三个函数是做什么的?MSDN文档中解释了这三个函数的作用:

srand():Sets the starting seed value for the pseudorandom number generator(设置伪随机数生成器的起始种子值)。

它的搭档rand():Generates a pseudorandom number(生成一个伪随机数)。

而time()的解释就更简单了:Get the system time(获得系统时间)。

这三个函数组合在一起,就可以生成随机数。

细心的同学可能会发现这里有一个特殊的词-伪随机数。那么什么是伪随机数呢?

关于伪随机数的概念我就不多说了,大家自行搜索一下就有很多解释,在这里我只说一下自己的理解:

先说一下真随机,真随机也就是我们日常说的随机,一个随机事件的结果是不确定的,比如抛硬币,在正常情况下,抛硬币的结果是不确定的,换句话说,结果是不可预测的。

然后说说伪随机,伪随机是计算机生成随机数的一种方式,计算机不能真正模仿随机事件,而只能通过计算来生成随机数。换句话说,如果我们知道了计算机计算随机数的算法,我们是可以预测伪随机数的。

当然我们得用例子说话。

从上面的讨论我们可以知道,因为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.隐写术,载荷对信号几乎无影响,跟噪声无法区分。

© 著作权归作者所有

共有 人打赏支持
simpower
粉丝 26
博文 564
码字总数 43827
作品 0
海淀
程序员
私信 提问
【天池直播】广东算法大赛冠军团队思路分享

广东算法大赛冠军团队的思路分享,教你在大赛中提升分数! 直播主题:广东算法大赛冠军团队思路分享 直播时间:12月13日 20:00 直播链接:点击跳转 直播嘉宾: 邢源 天池昵称:Novelfor 北京...

天池平台
2017/12/13
0
0
首届超人杯博客分享大赛圆满结束了

首届超人杯博客分享大赛圆满结束,此次超人杯博客大赛目的,旨在分享学习心得,总结在学习中经验,让更多的学员通过分享提供自身能力,也为其他人员获得经验。经过激烈的比拼和评选,最终杨同...

超人学院
2016/03/09
60
0
业界 | 猪脸识别正式开赛!杨强、车品觉实力助阵,关于刘强东举办的这场大赛,你需要知道更多

  机器之心报道   作者:王艺      2017 京东金融全球数据探索者大赛进入决赛,曾引发热议的「猪脸识别」正是本次比赛的赛题之一。本文为机器之心从大赛现场为你带来的一手报道。  ...

机器之心
2017/12/17
0
0
分享快应用开发经验,赠6台品牌手机丨掘金技术征文

快应用开发者大赛是由快应用生态平台十家硬件手机厂商努比亚、联想、一加、小米、vivo、华为、OPPO、金立、魅族、中兴联合主办。大赛围绕快应用生态平台统一的技术标准,进行快应用产品的开发...

快应用生态
11/14
0
0
全球首场深入投资实战的算法大赛,84万奖金,世界级AI导师,邀你来战!

     2018全球金融数据探索与发现大赛是全球首场深入投资实战的算法大赛,以海量金融数据、真实业务痛点、世界级AI与金融导师,面向全球征集金融与算法精英。   大赛已正式启动报名,立...

天池大数据科研平台
06/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache防盗链配置,Directory访问控制,FilesMatch进行访问控制

防盗链配置 通过限制referer来实现防盗链的功能 配置前,使用curl -e 指定referer [root@test-a test-webroot]# curl -e "http://www.test.com/1.html" -x127.0.0.1:80 "www.test.com/1.jpg......

野雪球
37分钟前
1
0
RxJava threading

因为Rx针对异步系统设计,并且Rx也自然支持多线程,所以新的Rx开发人员有时会假设Rx默认是多线程的。在其他任何事情之前,重要的是澄清Rx默认是单线程的。 除非另有说明,否则每次调用onNex...

woshixin
37分钟前
0
0
Python的安装及文件类型、变量

一、为什么学习python 服务于大数据、人工智能、自动化运维。 简单易学 代码简洁 薪资高 近几年越来越火 二、Python的安装 linux 系统默认安装, CentOS7 默认安装了python2.7 安装ipython y...

枫叶云
44分钟前
0
0
JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
51分钟前
23
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部