SecureRandom.hex() vs SecureRandom.random_bytes() 在 Rails 和 attr_encrypted 中生成密钥

SecureRandom.hex() vs SecureRandom.random_bytes() for key generation in Rails with attr_encrypted

attr_encrypteddocs 说我必须将 key = SecureRandom.random_bytes(32) 的结果存储在模型上。我认为将此密钥存储为 ENV 变量会更安全。我也习惯于 运行 rake secret 作为我的 ENV 变量。 rake secret 依赖于 SecureRandom.hex().

我想知道两件事:

  1. 我认为加密密钥应存储为 ENV 变量是否正确?
  2. 这两种 SecureRandom 方法的密钥加密强度是否存在差异? hex()random_bytes()?

SecureRandom#hex 被定义为 here 为:

def hex(n=nil)
  random_bytes(n).unpack("H*")[0]
end

所以他们生成的数据完全一样,只是格式不同

至于加密密钥,这取决于您和您托管应用程序的方式。如果它在您控制的服务器上,则未提交的配置文件很好(尽管环境变量方法仍然有效,显然)。如果您托管在例如Heroku,环境变量是必经之路。