Utility for generating and deriving random keys.

Methods

Attributes

[R] hash_digest_class

Class Public methods

new(hash_digest_class: ActiveRecord::Encryption.config.hash_digest_class)

📝 Source code
# 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
🔎 See on GitHub

Instance Public methods

derive_key_from(password, length: key_length)

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
# 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
🔎 See on GitHub

generate_random_hex_key(length: key_length)

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
# 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
🔎 See on GitHub

generate_random_key(length: key_length)

Returns a random key. The key will have a size in bytes of :length (configured Cipher‘s length by default)

📝 Source code
# File activerecord/lib/active_record/encryption/key_generator.rb, line 16
      def generate_random_key(length: key_length)
        SecureRandom.random_bytes(length)
      end
🔎 See on GitHub