什么';在ruby中,生成多达20字节的随机无符号值的最简洁方法是什么?

什么';在ruby中,生成多达20字节的随机无符号值的最简洁方法是什么?,ruby,random,Ruby,Random,对于rails应用程序,我正在生成由我自己的CA签名的X509证书。我知道,根据X509规范,生成的证书的序列号在CA中应该是唯一的 在我看来,我应该能够使用SecureRandom生成统计上不可能发生冲突的随机20字节,而不是跟踪已经发布的序列号,将其转换为正的Bignum,并将其设置为我生成的任何证书的序列号 最简洁的方法是什么 到目前为止,我的想法是: SecureRandom.hex(20).unpack('c*').inject { |r, n| r << 8 | n }

对于rails应用程序,我正在生成由我自己的CA签名的X509证书。我知道,根据X509规范,生成的证书的序列号在CA中应该是唯一的

在我看来,我应该能够使用
SecureRandom
生成统计上不可能发生冲突的随机20字节,而不是跟踪已经发布的序列号,将其转换为正的
Bignum
,并将其设置为我生成的任何证书的序列号

最简洁的方法是什么

到目前为止,我的想法是:

SecureRandom.hex(20).unpack('c*').inject { |r, n| r << 8 | n }
SecureRandom.hex(20).unpack('c*')。注入{| r,n | r一个改进:

SecureRandom.random_bytes(20).unpack('C*').inject { |r,n| r << 8 | n }

160位=20字节。

对于128位,我想我也可以通过一次64位来改进移位。编辑:哦,我很笨,根本不需要移位。@birarda Nevermind我之前关于只使用128位的评论-位很便宜;额外的32位不会有什么坏处:)
SecureRandom.random_number(1<<160)