quarta-feira, 3 de junho de 2009

Criptografia AES no Rails

Estava fazendo uma biblioteca com 2 funções básicas de criptografia (crypt e decrypt baseada nesses 2 posts que eu tinha encontrado abaixo:
http://snippets.dzone.com/posts/show/991
e
http://rails.brentsowers.com/2007/12/aes-encryption-and-decryption-in-ruby.html

Fiz meio que uma mistura dos 2 e gerei uma biblioteca para fazer as 2 partes:


class Crypt
require 'openssl'
require 'digest/sha1'
def criptografa(dado,user,iv)
#primeiro conjunto email
saida = Array.new
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
# O SHA1 da conta do user ou uma coluna Hash única para cada user podem ser usados
c.key = Digest::SHA1.hexdigest(user.conta)
c.iv = iv
e = c.update(dado)
e << c.final
#concatena na saida o resultado cifrado do dado de entrada
saida << e
#CASO SEJA NECESSARIO CRIPTOGRAFAR MAIS DADOS...
#instancie novamente c e repita o processo concatenando na saida o novo valor
return saida
end

#metodo usado para excluir emails e verificar a seguranca da transacao feita por GET
def descriptografa(msg,user,iv)
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.decrypt
c.key = Digest::SHA1.hexdigest(user.conta)
c.iv = iv
d = c.update(msg)
d << c.final
return d
end
end

Finalmente, para se ter um valor iv único para a sessão salve o valor após o login usando um filtro ou uma chamada simples após o mesmo.


  #Criando novo valor iv e salvando na session
def new_iv
c = OpenSSL::Cipher::Cipher.new("aes-256-cbc")
c.encrypt
iv = c.random_iv
session[:valor_iv] = iv
end

Nenhum comentário:

Postar um comentário