Maneira fácil de proteger colunas em banco de dados com Rails

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 loade dumpmé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