麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

Rails實現字段加密存儲

2020-10-29 19:33:51
字體:
來源:轉載
供稿:網友

方案

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

實現

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

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 里的一個類方法,可用于執行一個 column 如何存儲到數據庫,以及從數據庫讀取出來后要如何處理,例如:

class User < ActiveRecord::Base serialize :preferences, Hashenduser = User.newuser.preferences = { gender: 'male', age: 18}user.save!

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

class CustomerSerializer def self.load(value)  value.to_s.blank? ? "" : JSON.parse(value) end def self.dump(value)  (value || {}).to_json endendclass User < ActiveRecord::Base serialize :preferences, CustomerSerializerend

基于此,我們可以自己實現一個 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) endendclass 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, EncryptedStringSerializerend

可以改進的點

加解密用的 KEY 是否過于簡單?
針對現有數據,如何平滑過渡?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费亚洲视频在线观看 | a黄色片| 精品国产一区二区三区四区阿崩 | 欧美成人精品不卡视频在线观看 | 欧美性黄| 在线免费观看欧美 | 日韩视频区 | 污黄视频在线观看 | 九九热视频在线免费观看 | 日韩在线毛片 | 亚洲嫩草av| 国产成人在线一区二区 | 久久久精品视频在线观看 | va视频在线 | 亚洲精品一区二区三区免 | 国产午夜亚洲精品理论片大丰影院 | 日本爽快片100色毛片视频 | www.射| 色a综合 | 国产精品1区2区在线观看 | 中文字幕爱爱视频 | 成人在线视频国产 | 特级毛片a级毛片100免费 | 免费看黄色一级片 | 55夜色66夜色国产精品视频 | 国产成人精品免费视频大全最热 | 电影一级毛片 | 午夜精品久久久久久毛片 | 精品国产一区三区| 天海翼无删减av三级在线观看 | 狠狠操精品视频 | 青草av.久久免费一区 | 国产精品一二区 | 美国黄色小视频 | 99精品国产一区二区三区 | 日韩视频一区二区三区在线观看 | 欧美日韩免费一区 | 视频一区二区三区中文字幕 | 欧美成人黄色小视频 | 欧美乱码精品一区 | 亚洲成人在线视频网站 |