我曾使用下面的代码生成用于加密目的的伪随机数序列,但后来我在某个地方读到它可能不是很安全。有人能给我一个更好的生成器的C实现吗?主要目标是让这种方法速度更快。例如,我进行了一些研究,发现Blum Blum Shub方法会通过执行pow(N)计算完全降低性能。
PS.请不要引用没有C/C++代码的维基百科文章。我正在寻找所示内容的C或C++代码示例。
#define ROL(v, shift) ((((v) >> ((sizeof(v) * 8) - (shift))) | ((v) << (shift))))
ULONGLONG uiPSN = doSeed(); //64-bit unsigned integer
for(int i = 0; i < sizeOfArray; i++)
{
uiPSN = uiPSN * 214013L + 2531011L;
uiPSN = ROL(uiPSN, 16);
//Apply 'uiPSN'
}