Невозможно использовать openssl в приложении Ruby on Rails - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь использовать асимметричное шифрование в Ruby on Rails.Для этого я пытаюсь использовать библиотеку openssl.Сначала я создал ключи внутри модели с именем Manufacturer.

def create_verification_keys
  keypair = DigitalSign.generate_keypair
  self.private_key = keypair.to_s
  self.public_key = keypair.public_key.to_s
end

После этого внутри контроллера я написал:

@privatekey=Manufacturer.first.private_key 
@publickey=Manufacturer.first.public_key
$hash=Digest::MD5.hexdigest("abcd")
$encrypted_string = Base64.encode64(@privatekey.private_encrypt($hash))

Но когда я его запускаю, он возвращает следующую ошибку:

"undefined method `private_encrypt' for #<String:0x00007f3e107c2360> Did you mean? private_methods"

1 Ответ

0 голосов
/ 02 марта 2019

Ошибка возникает, потому что @privatekey переменная экземпляра имеет тип String и не имеет private_encrypt метода.

Это строка, потому что в методе create_verification_keys вы делаете следующее:

self.private_key = keypair.to_s
self.public_key = keypair.public_key.to_s

to_s здесь явно преобразует объект в строку, и это нормально, потому что база данных ожидает, хранит и возвращает простую строку (в данном случае), а не сложный объект.

Чтобы это исправить, сначала нужно создать экземпляр правильного типа.Если вы используете openssl gem, вероятно, это должно быть примерно так:

rsa = OpenSSL::PKey::RSA.new(@privatekey)
rsa.private_encrypt($hash)

Ссылка на документацию здесь .

...