Yigit C. Bacakoglu Yazılım Mühendisi | Rubyist | Mekanist on Rails

  27/12/2013 at 13:43       by yigit     under , ,

Merhaba arkadaşlar,

Rails 3+ uygulamalrında encryption - decryption için ActiveSupport::MessageEncryptor classını kullanabiliriz.

salt  = SecureRandom.random_bytes(64) 
key   = ActiveSupport::KeyGenerator.new('password').generate_key(salt) # => "\x89\xE0\x156\xAC..."
crypt = ActiveSupport::MessageEncryptor.new(key)                       # => #<ActiveSupport::MessageEncryptor ...>
encrypted_data = crypt.encrypt_and_sign('my secret data')              # => "NlFBTTMwOUV5UlA1QlNEN2xkY2d6eThYWWh..."
crypt.decrypt_and_verify(encrypted_data)                               # => "my secret data"

Yukarıda ki gibi encryption ve decryption yapabiliyoruz. İsterseniz bu işlemleri bir module altında toplayalım. uygulamamızda lib klasörü altında encryptor.rb dosyası oluşturun.

    module Encryptor
      @@crypt
      extend self

      def encrypt(val)
        crypt.encrypt_and_sign(val) rescue val
      end

      def decrypt(val)
        crypt.decrypt_and_verify(val) rescue val
      end

      def crypt
        @@crypt ||= ActiveSupport::MessageEncryptor.new(Rails.application.config.secret_token)
      end

    end

ben salt kullanmadım ve key olarak initializers altında olan uygulamamızın secret_token değerini kullandım.

1.9.3-p429 :018 > Encryptor.encrypt("Selam")
 => "a3dYY04zQWk3NmdzTlV6NnVkMHRDUT09LS01QkxIWWdqbHpTOS82MTRhc2pzaHBnPT0=--063c0d13d2fd10fd61ad14d222ab54d1e513e316" 

1.9.3-p429 :019 > Encryptor.decrypt("a3dYY04zQWk3NmdzTlV6NnVkMHRDUT09LS01QkxIWWdqbHpTOS82MTRhc2pzaHBnPT0=--063c0d13d2fd10fd61ad14d222ab54d1e513e316")
 => "Selam" 

Sonra ki yazımda, ActiveRecord classını extend ederek veritabanında encrypted veri tutmak işlemlerini anlatacağım.

Comment Rails uygulamalarında encryption / decryption