0

字符串:

SecureRandom.urlsafe_base64(64)
#=> "nItIZhCvbne9zjU4JUWJOL46y53ERfmuQQW_FN4_ymk2EdbQr1NYOXTJVIeUWXhvRCe4OU3Is2ZEaHpiXXGYxw"

随机::格式化。urlsafe_base64执行:

def urlsafe_base64(n=nil, padding=false)
  s = [random_bytes(n)].pack("m0")
  s.tr!("+/", "-_")
  s.delete!("=") unless padding
  s
end

所以问题基本上就是标题所说的:是否有一种理智的方法来检查是否使用上述方法生成了字符串?

也许有一些正则表达式?来自文档:

结果可能包含 AZ、az、0-9、“-”和“_”。如果填充为真,也使用“=”。

我认为没有,因为字符串只是一个字符串,但我需要知道在检查它时我是否可以依赖超过它的长度的任何东西。

最初的问题是 Rollbar gem 使用 过滤 API 请求标头***,我想更改它,以便我可以看到napi 令牌的第一个字符来跟踪谁发出了失败的请求。

4

1 回答 1

1

我要回答字面问题:

有没有一种健全的方法来检查是否使用上述方法生成了字符串?

就在这里。有点儿。取决于你的“理智”界限在哪里。:)

改编自http://www.schneems.com/2016/01/25/ruby-debugging-magic-cheat-sheet.html

require 'objspace'
require 'securerandom'

ObjectSpace.trace_object_allocations_start

Kernel.send(:define_method, :sup) do |obj|
  puts "#{ ObjectSpace.allocation_sourcefile(obj) }:#{ ObjectSpace.allocation_sourceline(obj) }"
end

str = SecureRandom.urlsafe_base64(64)

sup str
# >> /Users/sergio/.rubies/ruby-2.3.3/lib/ruby/2.3.0/securerandom.rb:169
于 2017-03-20T11:19:04.633 回答