Ruby / Rails OpenSSL :: PKey :: RSAError: данные больше, чем современные. - PullRequest
1 голос
/ 28 апреля 2011

Я думаю, что начал получать эту ошибку, когда я переключился с 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 символов.

Я сейчас в тупике, есть идеи?

1 Ответ

0 голосов
/ 11 апреля 2012

Возможно, вы неправильно храните ключи в базе данных.Вероятно, есть какое-то поле, которое усекается.

Полученное сообщение, вероятно, означает, что данные слишком длинные, чтобы их можно было зашифровать с помощью такого маленького ключа.В этом случае вам следует зашифровать данные с помощью AES и зашифровать ключ AES с помощью RSA.Затем отправьте зашифрованные данные и зашифрованный ключ.

...