最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rails實現(xiàn)字段加密存儲

 更新時間:2017年11月27日 08:56:42   作者:JustQyx  
這篇文章主要介紹了Rails實現(xiàn)字段加密存儲的方法以及具體的示例代碼,非常實用,需要的朋友可以參考下

方案

存儲前,加密后再存儲到數(shù)據(jù)庫
讀取后,利用 KEY 進行解密

實現(xiàn)

ActiveSupport::MessageEncryptor 是 Rails 基于 openssl 封裝實現(xiàn)的一個類,可用于對一個對象進行加密、解密操作。例如:

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"

serialize 是 Rails ActiveRecord 里的一個類方法,可用于執(zhí)行一個 column 如何存儲到數(shù)據(jù)庫,以及從數(shù)據(jù)庫讀取出來后要如何處理,例如:

class User < ActiveRecord::Base
 serialize :preferences, Hash
end

user = User.new
user.preferences = {
 gender: 'male',
 age: 18
}
user.save!

另外,Rails 還允許自定義 Serizlizer,使得開發(fā)者能夠自行決定如何做進行序列化和反序列化。例如:

class CustomerSerializer
 def self.load(value)
  value.to_s.blank? ? "" : JSON.parse(value)
 end

 def self.dump(value)
  (value || {}).to_json
 end
end

class User < ActiveRecord::Base
 serialize :preferences, CustomerSerializer
end

基于此,我們可以自己實現(xiàn)一個 serializer,使得我們能夠進行對字段進行加密存儲,同時讀取出來時能夠自行進行解密。

class EncryptedStringSerializer
 def self.load(value)
  value.to_s.blank? ? '' : decrypt(value)
 end

 def self.dump(value)
  encrypt(value || '')
 end

 private

 def self.encrypt(value)
  encryptor.encrypt_and_sign(value)
 end

 def self.decrypt(value)
  encryptor.decrypt_and_verify(value)
 end

 def self.encryptor
  @encryptor ||= ActiveSupport::MessageEncryptor.new(Settings.message_encryptor_key)
 end
end

class UserAddress < ActiveRecord::Base
 serialize :phone, EncryptedStringSerializer
 serialize :first_name, EncryptedStringSerializer
 serialize :last_name, EncryptedStringSerializer
 serialize :country, EncryptedStringSerializer
 serialize :state, EncryptedStringSerializer
 serialize :city, EncryptedStringSerializer
 serialize :address1, EncryptedStringSerializer
 serialize :address2, EncryptedStringSerializer
 serialize :zipcode, EncryptedStringSerializer
end

可以改進的點

加解密用的 KEY 是否過于簡單?
針對現(xiàn)有數(shù)據(jù),如何平滑過渡?

相關(guān)文章

  • ruby基本數(shù)據(jù)類型簡明介紹

    ruby基本數(shù)據(jù)類型簡明介紹

    這篇文章主要介紹了ruby基本數(shù)據(jù)類型簡明介紹,本文講解了數(shù)值類型、字符串、區(qū)間、數(shù)組、散列表、符號等基本數(shù)據(jù)類型,需要的朋友可以參考下
    2015-05-05
  • Ruby中關(guān)于模塊的一些基礎(chǔ)知識

    Ruby中關(guān)于模塊的一些基礎(chǔ)知識

    這篇文章主要介紹了Ruby中關(guān)于模塊的一些基礎(chǔ)知識,是Ruby入門學(xué)習(xí)中的一些重要知識點,需要的朋友可以參考下
    2015-07-07
  • Ruby常用文件操作代碼實例

    Ruby常用文件操作代碼實例

    這篇文章主要介紹了Ruby常用文件操作代碼實例,如新建文件、輸出文件內(nèi)容、IO操作、輸出文件路徑、stringio使用等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Ubuntu系統(tǒng)安裝Ruby語言的三種方法

    Ubuntu系統(tǒng)安裝Ruby語言的三種方法

    這篇文章主要介紹了Ubuntu系統(tǒng)安裝Ruby語言的三種方法,本文講解了使用apt-get安裝、使用brightbox ppa倉庫安裝、使用RVM安裝3種方法,需要的朋友可以參考下
    2015-01-01
  • Ruby和Ruby on Rails中解析JSON格式數(shù)據(jù)的實例教程

    Ruby和Ruby on Rails中解析JSON格式數(shù)據(jù)的實例教程

    這篇文章主要介紹了Ruby和Ruby on Rails中解析JSON格式數(shù)據(jù)的實例教程,文中介紹到的Ruby on Rails中的JSON解析工具包json_pure使用起來十分方便,需要的朋友可以參考下
    2016-04-04
  • Ruby的基本語法學(xué)習(xí)總結(jié)

    Ruby的基本語法學(xué)習(xí)總結(jié)

    這篇文章主要介紹了Ruby的基本語法學(xué)習(xí)總結(jié),本文講解了Ruby中的關(guān)鍵字、注釋、數(shù)據(jù)類型、賦值和條件運算、輸出和輸入、條件判斷語句、循環(huán)語句等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • Ruby實現(xiàn)的3種快速排序算法

    Ruby實現(xiàn)的3種快速排序算法

    這篇文章主要介紹了Ruby實現(xiàn)的3種快速排序算法,本文給出了快速排序的普通版本、快速排序的隨機化版本、快速排序的利用了Ruby的語法糖的隨機化版本三個版本,需要的朋友可以參考下
    2015-05-05
  • Ruby中遍歷目錄的簡潔方法

    Ruby中遍歷目錄的簡潔方法

    這篇文章主要介紹了Ruby中遍歷目錄的簡潔方法,本文分享了一個復(fù)雜方法和一個簡潔方法,需要的朋友可以參考下
    2015-01-01
  • ruby 變量

    ruby 變量

    ruby 變量...
    2007-11-11
  • 舉例講解Ruby中require的使用方法

    舉例講解Ruby中require的使用方法

    這篇文章主要介紹了Ruby中require的使用方法,用其來各種引用文件路徑,需要的朋友可以參考下
    2015-07-07

最新評論

乳山市| 丹巴县| 大理市| 周宁县| 于都县| 新沂市| 大安市| 突泉县| 大理市| 苏尼特左旗| 平顺县| 察隅县| 鹰潭市| 兴仁县| 文成县| 当阳市| 博客| 仙居县| 宜川县| 大城县| 漯河市| 金川县| 河池市| 治多县| 衡阳市| 通许县| 克什克腾旗| 临澧县| 玉环县| 杨浦区| 河间市| 蒙自县| 上蔡县| 句容市| 丹凤县| 萍乡市| 宜君县| 九江县| 剑阁县| 昌江| 建昌县|