Я думаю, что начал получать эту ошибку, когда я переключился с MySQL на PostgreSQL.
Я написал код для шифрования атрибутов модели дешифрования, содержащих конфиденциальные данные, и работал до переключения db.
У меня есть следующий код:
@pbk = OpenSSL::PKey::RSA.new File.read("#{RAILS_ROOT}/cert/pb_sandwich.pem")
@pvk = OpenSSL::PKey::RSA.new File.read("#{RAILS_ROOT}/cert/tuna_salad.pem"), 'pass45*'
model.sendata = Base64.encode64 @pbk.public_encrypt(model.sendata)
Я запускаю этот код при сохранении. Я также попробовал с и без первого использования Base64.
Тогда, когда я пытаюсь прочитать:
@pvk.private_decrypt Base64.decode64(model.sendata)
Я получаю эту ошибку:
OpenSSL::PKey::RSAError: data greater than mod len
Я никогда не получал этого раньше, когда использовал MySQL. Я не могу вспомнить, какой тип данных был столбцом sendata в MySQL, но в моей текущей установке PostgreSQL этот столбец имеет тип данных bytea
Я предполагаю, что это проблема, поскольку раньше она нормально работала с MySQL. Какой тип данных должен быть в столбце, если я хочу пропустить этот дополнительный шаг для кодирования / декодирования Base64? Если это проблема, которая есть.
Еще одно замечание: я попытался сгенерировать закрытый ключ с длинами мода: 2048, 4096 и 5120, и у меня всегда возникает одна и та же ошибка. Кроме того, поле sendata не очень долго перед кодированием, оно меньше 40 символов.
Я сейчас в тупике, есть идеи?