|
本帖最后由 Gorgon_Meducer 于 2014-3-6 13:41 编辑
东西不复杂,我就不罗嗦了。当然,需要说明下,这个算法是我原创的。
如有雷同,纯属巧合。
此代码纯属交流目的,如用作安全领域,后果自负
#include <stdint.h>
#include <stdlib.h>
//! \brief random seed
static uint16_t s_hwRandomSeed = 0xAA55;
static uint8_t s_chRandomTable[] = {
0x12,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
0xF1,0xE2,0xD3,0xC4,0xB5,0xA6,0x97,0x88};
/*! \note set random generator seed
* \param hwSeed random seed
* \return none
*/
void set_random_seed( uint16_t hwSeed )
{
s_hwRandomSeed ^= hwSeed;
}
/*! \note get a random integer
* \param none
* \return random integer value
*/
uint16_t get_random_u16( void )
{
uint16_t *phwResult = (uint16_t *)&s_chRandomTable[(s_hwRandomSeed & 0x0E)];
*phwResult += s_hwRandomSeed;
s_hwRandomSeed ^= *phwResult;
return *phwResult;
}
/*! \note get a random byte
* \param none
* \return random integer value
*/
uint8_t get_random_u8( void )
{
return get_random_u16();
} |
|