Как зашифровать новые данные новым ключом, используя attr_encrypted (поверх старых данных)? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую attr_encrypted, и некоторые данные зашифрованы ключом, к которому у меня больше нет доступа.Я хотел бы перезаписать существующие / старые данные новыми данными, используя новый ключ.Как я могу это сделать?

Например, рассмотрим это:

class User
    attr_encrypted :account_number,  key: ENV['ATTR_ENCRYPTED_KEY'] # new key
end

Следующая попытка завершится неудачно с OpenSSL::Cipher::CipherError

u = User.first
u.account_number = '123456789' # error here!
u.save 

На основе трассировки стека (ниже), я полагаю, это связано с тем, что attr_encrypted сначала пытается decrypt, что явно не сработает из-за того, что ключ другой.Есть ли способ обойти это, и просто написать новые данные и iv, с новым ключом?

.../gems/encryptor-3.0.0/lib/encryptor.rb:98:in `final'
.../gems/encryptor-3.0.0/lib/encryptor.rb:98:in `crypt'
.../gems/encryptor-3.0.0/lib/encryptor.rb:49:in `decrypt'
.../bundler/gems/attr_encrypted-399c5dd168ca/lib/attr_encrypted.rb:246:in `decrypt'
.../bundler/gems/attr_encrypted-399c5dd168ca/lib/attr_encrypted.rb:335:in `decrypt'
.../bundler/gems/attr_encrypted-399c5dd168ca/lib/attr_encrypted.rb:164:in `block (2 levels) in attr_encrypted'
.../bundler/gems/attr_encrypted-399c5dd168ca/lib/attr_encrypted/adapters/active_record.rb:76:in `block in attr_encrypted'
...