微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 之硬件随机数。

之硬件随机数。

时间:10-02 整理:3721RD 点击:
     stm32f412有个很好的功能硬件随机数,随机数在现在安全通道的建立等方面运用很多。大部分的芯片没有硬件随机数功能,如需要随机数都是通过软件实现伪随机数。虽然伪随机的安全性能很高但是还是有迹可循的,对安全要求比较高的产品这样不安全的。
      本想分享下随机数,对称加解密和哈希算法。但写完程序才发现F412并不支持对称加解密,F4系列有的型号支持对称加解密如STM32F415xx/417xx, STM32F437xx 和 STM32F439xx,希望各位选型时别选失误。
     由于没有对称加解密,所以接下来简单介绍下随机数的实现。随机数根据官方标准库中的例程进行简单修改即可实现生成随机数功能。写程序参考官方标准库中例程是个不错的选择。
     直接来干的上程序,生成的随机数时32位数据,但很多时候都是以8位数组形式使用所以进行了下转换。开始考虑了大小端问题,后来一想好像没有比较本来就是随机数,字节顺序又有什么关系。代码如下:

  1. <div>/**
  2.   * @brief  RNG configuration
  3.   * @param  None
  4.   * @retval None
  5.   */
  6. void HAL_RNG_Init(void)
  7. {  
  8.         /* Enable RNG clock source */
  9.         RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);

  10.         /* RNG Peripheral enable */
  11.         RNG_Cmd(ENABLE);
  12. }

  13. void HAL_RNG_GenRand(u8 *pu8Out, u32 u32Len)
  14. {
  15.         u32 random32bit = 0;
  16.         u32 u32counter = 0;
  17.        
  18.         for(u32counter = 0; u32counter < u32Len/4; u32counter++)
  19.         {
  20.                 /* Wait until one RNG number is ready */
  21.                 while(RNG_GetFlagStatus(RNG_FLAG_DRDY)== RESET)
  22.                 {
  23.                 }

  24.                 /* Get a 32bit Random number */      
  25.                 random32bit = RNG_GetRandomNumber();
  26.                
  27.                 memcpy(pu8Out, (u8*)(&random32bit), 4);
  28.                 pu8Out += 4;
  29.         }       
  30.        
  31. }</div><div>
  32. 需要注意,输入的长度要是4的整数倍。</div>

复制代码

不好意思忘截图了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top