(1)随机数是概念
随机数,顾名思义,就是随机生成的一个数据。
随机数
举个例子,我们在一堆红豆中,随手抓一把红豆,那么手中这把红豆的粒数,就是一个随机数。
因为我们无法具体预判抓的这一把红豆具体多少粒,这个数据是随机的,不可预算的,故这种方式产生的数据,就叫随机数。
(2)随机数的用法
随机数,可用于做一些需要随机的事件,如抽奖,掷骰子等。
同时,随机数也多用于简单的加密。通过随机生成的一个随机数,将一段需要加密的数据,进行一定的数据公式运算,然后发送出去,接收方只要知道这段接收到的数据中,哪一段是密钥随机数,哪一段是加密密文,就可以通过协定的公式反向运算,进行解密,就可以获得密文数据。
数据简单加密
二、生成随机数的方法(1)通过单片机计数器的方式
通过单片机计数器的方式声明一个16位的变量CNT,并将其放置于主循环while(1)中,让其自加,如
当单片机运行到某一需要随机数的时候,如按键触发某个功能,需要获取随机数,来作为加密的随机码时,这时正在自增变化的CNT变量,提取其尾数(CNT),就可以作为一个伪随机数。
在这里,可能会有一个疑问了,为何这个值可以作为随机数使用呢?原因如下:
1)裸机跑单片机属于单线程运行方式,在主循环while(1){}中,循环一次所需时间,是根据每次循环所执行的内容决定的,具有不确定性;
2)当我们按下按键时,由于按下的时间点是不确定的,所以CNT变化了多少,也具有不确定性;
3)由于单片机主频很高,在我们触发时,CNT已经递增了数千个值了,故截取数据时,CNT的尾数,也是不确定性的。
因此,可以用该方式,来生成一个我们想要的随机数。
(2)通过ADC的方式
使用ADC的方式,采集芯片内部温度传感器的方式。来获得一个伪随机数。
我们自行测试能知道,单片机在通过ADC采集这个温度波形模拟信号时,该数值的尾数,变化是很随机的。而温度传感器,受到不同时刻温度的影响时,该值的尾数变化也是不确定的。
因此。我们可以通过该方式,来生成一个伪随机数。
ADC采集温度
(3)通过单片机自带的硬件随机数发生器的方式
有些单片机,集成了专有的硬件随机数发生器,通过获取该发生器的随机数值,即可得到一个理想的随机数。
如STM32F4 自带了硬件随机数发生器(RNG),RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个32 位的随机数。
RNG发生器图