需求:通过数十字节的种子生成长度 N 字节的随机数,并且随机性需足够高。运行时库有现成的 AES 算法。
为了偷懒写算法,直接将 N 个 0 的数据通过 AES 加密如何?密钥使用种子前半部分,IV 使用种子后半部分。
需求:通过数十字节的种子生成长度 N 字节的随机数,并且随机性需足够高。运行时库有现成的 AES 算法。
为了偷懒写算法,直接将 N 个 0 的数据通过 AES 加密如何?密钥使用种子前半部分,IV 使用种子后半部分。
|
tuwulin365Aug 24, 2024
1
不怎么样。有不少伪随机数生成算法,比如:梅森旋转( Mersenne Twister/MT )算法。
|
|
R4rvZ6agNVWr56V0Aug 24, 2024
2
可行。不过需要确保种子的随机性和安全性
|
|
slowmanAug 24, 2024
3
|
|
4
系统都有随机数生成器,对 Linux 来说就是/dev/random 和/dev/urandom
|
|
tool2dxAug 24, 2024 via Android
5
我个人觉得可行,aes 硬件加速,速度飞快。
https://www.jandrewrogers.com/2019/02/12/fast-perfect-hashing/ |
|
7h3d4wnAug 24, 2024
6
具有密码学安全性的随机数是要满足足够随机以及不可预知性
为此在 Linux/windows 下有成熟的调用方式 它们都用了模拟量来做种子 不要自己造纯数字量的随机数算法 |
|
churchmiceAug 24, 2024 via Android
7
AES 这种一般是用作随机数生成的后处理算法,可以了解一下
源头还是随机数 |
|
libookAug 24, 2024 via Android
8
感觉 op 需要的不是伪随机数,而是可以生成看起来摸不清规律的字符串,但同时又可以还原成原文;所以需要的可能是一种编码或一种加密。
如果你可以满足于别人在不知道算法的情况下无法还原,那么就可以用一些编码方案,比如凯撒密码和 base64 (可以叠加多种算法);如果希望在公开算法的情况下依然确保自己能还原原文就用加密方案,如 aes 和 chacha20 。 |
|
9
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
|
|
mxT52CRuqR6o5Aug 24, 2024 via Android
10
主要是看你生成随机数的目的
|
|
mengzhuoAug 24, 2024
11
Go 就是用 3 round AES 来做 hash 的
|
|
dodeAug 24, 2024
12
话说对称加密,在使用密钥加密的时候,有写模式需要一个初始向量,这个向量设置影响安全性吗
|
|
14
|
|
zzzremakeAug 25, 2024
15
AES (分组密码)本身确实是可以当伪随机排列用,他的安全性是根据密钥长度来保证的,日常使用应该没啥问题,注意一下密钥的生成方式就行,一般来说要特定算法生成而非简单的 random...?
不过公开一部分明文仍要保证安全性...这就不懂了,理论上应该没啥问题,不过需要严谨的安全性证明. |
|
CodeCodeStudyAug 26, 2024
16
@dode #12 需要初始向量 iv ,是因为某些模式是分组加密,每一组需要前一组的加密结果,那么第一组没有前一组,所以才需要初始向量
|
|
linglinglingAug 26, 2024
17
不什么样,高射炮打蚊子,虽然也行,不合算。
|
|
mengzhuoAug 26, 2024
18
|
|
rekulasAug 27, 2024
19
可以用 只是没啥必要, go 本身带了随机数库为啥用 aes 来转一遍,这个强度只取决于你的种子,用了 aes 也不能提高强度反而变慢了
说个题外话,说 aes 的速度快其实是说在对称加密算法上快,跟随机数生成器比起来其实很慢,可以慢几百甚至上千倍 |