使用 AES 生成伪随机数如何?

查看 172|回复 11
作者:iqoo   
需求:通过数十字节的种子生成长度 N 字节的随机数,并且随机性需足够高。运行时库有现成的 AES 算法。
为了偷懒写算法,直接将 N 个 0 的数据通过 AES 加密如何?密钥使用种子前半部分,IV 使用种子后半部分。
tuwulin365   
不怎么样。有不少伪随机数生成算法,比如:梅森旋转( Mersenne Twister/MT )算法。
GeekGao   
可行。不过需要确保种子的随机性和安全性
1423   
直接用 https://github.com/tildeleb/aeshash/tree/master
libook   
系统都有随机数生成器,对 Linux 来说就是/dev/random 和/dev/urandom
tool2dx   
我个人觉得可行,aes 硬件加速,速度飞快。
https://www.jandrewrogers.com/2019/02/12/fast-perfect-hashing/
7h3d4wn   
具有密码学安全性的随机数是要满足足够随机以及不可预知性
为此在 Linux/windows 下有成熟的调用方式
它们都用了模拟量来做种子
不要自己造纯数字量的随机数算法
churchmice   
AES 这种一般是用作随机数生成的后处理算法,可以了解一下
源头还是随机数
libook   
感觉 op 需要的不是伪随机数,而是可以生成看起来摸不清规律的字符串,但同时又可以还原成原文;所以需要的可能是一种编码或一种加密。
如果你可以满足于别人在不知道算法的情况下无法还原,那么就可以用一些编码方案,比如凯撒密码和 base64 (可以叠加多种算法);如果希望在公开算法的情况下依然确保自己能还原原文就用加密方案,如 aes 和 chacha20 。
henix   
AES 的 CTR 模式,通过加密一个不断增长的计数器来得到一个密钥流( key stream ),我认为这就相当于一个伪随机数生成器 https://zh.wikipedia.org/wiki/%E5%88%86%E7%BB%84%E5%AF%86%E7%A0%81%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F#%E8%AE%A1%E6%95%B0%E5%99%A8%E6%A8%A1%E5%BC%8F%EF%BC%88CTR%EF%BC%89
您需要登录后才可以回帖 登录 | 立即注册

返回顶部