драгоценный камень attr_encrypted не работает в рельсах 6

Я использовал attr_encrypted (1.3.3) в rails 4.1 в пользовательской модели со следующими подробностями.

attr_encrypted :email, :key => 'some_key'

После обновления приложения до rails 6 attr_encrypted переключился на attr_encrypted (3.1.0), который использует шифратор (~> 3.0.0)

в шифраторе (~>3.0.0) введена новая проверка

raise ArgumentError.new("key must be #{cipher.key_len} bytes or longer") if options[:key].bytesize < cipher.key_len

какое raises ArgumentError (key must be 32 bytes or longer) исключение для моего существующего ключа

Как я могу использовать гем attr_encrypted с rails 6, не нарушая функциональность пользователя?


person Bloomberg    schedule 10.05.2020    source источник


Ответы (2)


Чтобы использовать старое поведение в приложении драгоценного камня, зашифрованного с помощью attr, вам нужно использовать еще несколько параметров.

До:

attr_encrypted :email, :key => 'some_key'

Сейчас:

attr_encrypted :email, key: 'some_key', algorithm: 'aes-256-cbc', mode: :single_iv_and_salt, insecure_mode: true

Если у вас ключ меньше 32 байт

insecure_mode: true

позволит вам использовать более короткий ключ.

person Bloomberg    schedule 10.05.2020

Это было критическое изменение в версии 2.0 этого драгоценного камня. Алгоритм по умолчанию теперь "aes-256-gcm". Более подробная информация здесь -опция-алгоритма

person Sergii K    schedule 10.05.2020
comment
означает ли это, что я должен изменить ключ: не нарушит ли это user_authentication с существующими ключами? - person Bloomberg; 10.05.2020