c语言随机数加密,用于C语言加密的快速伪随机数发生器

4 个答案:

答案 0 :(得分:17)

ISAAC(http://www.burtleburtle.net/bob/rand/isaacafa.html)可能是加密速度最快的PRNG之一(站点代码)。另一种方法是在计数器模式下使用分组密码。像TwoFish这样合理快速且免费提供的东西会很有效。

如果你不需要很多数字,所有现代操作系统都有内置的RNG,适合加密使用,虽然它们通常不能产生大量数字,因为它们依赖于从输入时序等来源积累熵。类Unix系统(Linux,OSX)有/ dev / random,Windows有CryptGenRandom。即使这些不适合您的需求,您也可以使用它们为您最终使用的PRNG播种。

答案 1 :(得分:5)

查看(或使用)OpenSSL库中的随机数生成器。

任何安全随机数生成器的难点是播种。

如果您使用的是Windows,请考虑使用rand_s()。

在Linux上查看/ dev / urand。

某些种子播种方法在重启后很快就会变得非常随意。

您可以使用随机字节创建文件。

使用文件和OS方法进行种子设定。

定期使用随机数生成器写入新文件。

答案 2 :(得分:1)

不要“自己动手”加密。请改用经过认证的图书馆。

为了提高速度,请尝试使用可在GPU上运行的库,它具有更强的计算能力。

答案 3 :(得分:-4)

我会推荐Mersenne-Twister,我一次又一次地使用它。

C代码为here。

如果您使用C ++ 11,那么您可以使用mersenne twister作为库本身的一部分。 Mersenne Twister目前是最好的算法之一。

以下是我将如何在C ++ 11中实现的功能。这很简单。 mt19937是用C ++ 11中的Mersenne Twister构建的。

std::vector classname::mersennetwister(const int& My,const int& Mz,const int& Ny,const int& Nz)

{

int ysize = (My + 2*Ny + 1);

int zsize = (Mz + 2*Nz + 1);

int matsize = ysize*zsize;

unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();

std::mt19937_64 generator (seed);

std::uniform_real_distribution distribution(0,1);

std::vector randarray = f.array1dgen(matsize,0);

for (int i=0;i

{

randarray[i] = distribution(generator);

}

return(randarray);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值