Em meu único projeto, preciso armazenar dados criptografados na coluna do banco de dados.
Encontrei alguns projetos no Ruby Toolbox para isso.
Mas os principais problemas deste projeto são:
- São muito grandes
- Eles não são mantidos
- Eles não são personalizáveis
Então, encontrei uma solução melhor para mim.
Como você sabe, o ActiveRecord pode serializar qualquer coluna. ActiveRecord usa Marshal para serializar coluna por padrão. Mas podemos alterá-lo para usar qualquer classe de serialização personalizada. Os principais requisitos desta classe personalizada são ter load
e dump
métodos.
Acho que meu exemplo vai te ajudar a diminuir o tempo de seu desenvolvimento.
# Example of custom serialization class
class Example < ActiveRecord::Base
class Encryptor
def initialize(default = '')
@default = default
end
def cipher
# You can use any two ways encryption ruby gem for this
# I'm used gibberish bacause it very usable for me
@cipher ||= ::Gibberish::AES.new('p@ssw0rd')
end
def load(s)
s.present? ? cipher.dec(s) : @default.clone
end
def dump(s)
cipher.enc(s || @default)
end
end
serialize :key, Encryptor.new('')
end