Ruby: 如何生成只有字母数字字符的可变位长度的字符串?

Ruby: How to generate strings of variable bits length with only alphanumeric characters?

我正在尝试使用 Ruby 解决以下问题:

我需要生成具有可变位长度且仅包含字母数字字符的字符串。

这是我的 already found:

Digest::SHA2.new(bitlen = 256).to_s
# => "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"

它完全符合我的需要,但它只接受 256、384 和 512 作为 bitlen

有人知道任何替代方案吗?

提前致谢。

更新

  1. One byte = collection of 8 bits.
  2. alphanumeric character occupies 1 byte according to String#bytesize.
('a'..'z').chain('A'..'Z').chain('0'..'9').map(&:bytesize).uniq
# => [1]
  1. 根据上述事实,我们可以假设

    • SecureRandom.alphanumeric(1) 生成一个 8 位长度的字母数字字符串。
    • SecureRandom.alphanumeric(2) 生成 16 位长度的字母数字字符串。
    • SecureRandom.alphanumeric(3) 生成一个 24 位长度的字母数字字符串。
    • 等等...
  2. 因此,可以认为是一个可以接受的解决方案。

使用SecureRandom.

首先,确保您需要它:

require 'securerandom'

然后你可以生成值:

SecureRandom.alphanumeric(10)
=> "hxYolwzk0P"

10 更改为您需要的任何长度。

值得指出的是,您使用的示例返回的不是字母数字值,而是十六进制值。如果您特别需要十六进制,那么您可以使用:

SecureRandom.hex(10)
=> "470eb1d8daebacd20920"