我正在尝试使用 Ruby 解决以下问题:
我需要生成具有可变位长度的字符串,这些字符串仅包含字母数字字符。
这是我已经发现的:
Digest::SHA2.new(bitlen = 256).to_s
# => "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
它完全符合我的需要,但它只接受 256、384 和 512 作为bitlen
。
有人知道任何替代方案吗?
提前谢谢。
更新
- 一个字节 = 8 位的集合。
- 每个字母数字字符根据字符串#字节化占用 1 个字节。
('a'..'z').chain('A'..'Z').chain('0'..'9').map(&:bytesize).uniq
# => [1]
基于上述事实,我们可以假设
SecureRandom.alphanumeric(1)
生成一个长度为 8 位的字母数字字符串。SecureRandom.alphanumeric(2)
生成长度为 16 位的字母数字字符串。SecureRandom.alphanumeric(3)
生成一个长度为 24 位的字母数字字符串。- 等等...
因此,@anothermh的答案可以被认为是一个可以接受的解决方案。
使用SecureRandom。
首先,请确保您需要它:
require 'securerandom'
然后,您可以生成值:
SecureRandom.alphanumeric(10)
=> "hxYolwzk0P"
将10
更改为您需要的任何长度。
值得指出的是,您使用的示例返回的不是字母数字,而是十六进制值。如果您特别需要十六进制,则可以使用:
SecureRandom.hex(10)
=> "470eb1d8daebacd20920"