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



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

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

这是我已经发现的:

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

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

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

提前谢谢。

更新

  1. 一个字节 = 8 位的集合。
  2. 每个字母数字字符根据字符串#字节化占用 1 个字节。
('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. 因此,@anothermh的答案可以被认为是一个可以接受的解决方案。

使用SecureRandom。

首先,请确保您需要它:

require 'securerandom'

然后,您可以生成值:

SecureRandom.alphanumeric(10)
=> "hxYolwzk0P"

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

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

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

相关内容

  • 没有找到相关文章

最新更新