class ActiveRecord::Encryption::KeyGenerator
Utility for generating and deriving random keys.
Attributes
[R] | hash_digest_class |
Public class methods
Source code GitHub
# File activerecord/lib/active_record/encryption/key_generator.rb, line 11
def initialize(hash_digest_class: ActiveRecord::Encryption.config.hash_digest_class)
@hash_digest_class = hash_digest_class
end
Public instance methods
Derives a key from the given password. The key will have a size in bytes of :length
(configured Cipher
‘s length by default)
The generated key will be salted with the value of ActiveRecord::Encryption.key_derivation_salt
Source code GitHub
# File activerecord/lib/active_record/encryption/key_generator.rb, line 38
def derive_key_from(password, length: key_length)
ActiveSupport::KeyGenerator.new(password, hash_digest_class: hash_digest_class)
.generate_key(key_derivation_salt, length)
end
Returns a random key in hexadecimal format. The key will have a size in bytes of :length
(configured Cipher
‘s length by default)
Hexadecimal format is handy for representing keys as printable text. To maximize the space of characters used, it is good practice including not printable characters. Hexadecimal format ensures that generated keys are representable with plain text
To convert back to the original string with the desired length:
[ value ].pack("H*")
Source code GitHub
# File activerecord/lib/active_record/encryption/key_generator.rb, line 30
def generate_random_hex_key(length: key_length)
generate_random_key(length: length).unpack("H*")[0]
end
Returns a random key. The key will have a size in bytes of :length
(configured Cipher
‘s length by default)
Source code GitHub
# File activerecord/lib/active_record/encryption/key_generator.rb, line 16
def generate_random_key(length: key_length)
SecureRandom.random_bytes(length)
end