Как сохранить ключ openssl / iv в файл, а затем восстановить его? - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь зашифровать файл, сохранить ключ / iv в файл, а затем восстановить ключ / iv из файла.

Почему-то после того, как я прочитал файл, данные изменились каким-то образом, что я не могу понять.

См. Ниже для MWE:

require 'openssl'
cipher = OpenSSL::Cipher.new('aes-256-gcm')
cipher.encrypt
original = cipher.random_key
File.open("foo", "w") {|f| f.write(original) }
readfromfile = File.read("foo")
if readfromfile != original
  puts "The information has changed, but why?"
end

Я ожидаю, что данные не изменятся после того, как я прочитал их из файла, но ruby всегда возвращает их как разные.

Когда я печатаю оригинал и readfromfile, они всегда выглядят одинаково. Когда я сравниваю оригинал и кошку файла, они выглядят одинаково.

Класс данных оба возвращают строку.

Если я сохраню любую другую строку в файл и прочту ее обратно, она останется прежней.

Я получаю одинаковый результат, генерирую ли я ключ или iv.

Что происходит?

Вторичный вопрос: есть ли в ruby способ выполнить сравнение, которое возвращает в чем разница? Что-то вроде diff?

1 Ответ

0 голосов
/ 22 апреля 2020

В конце я не смог понять, почему данные менялись, но я решил проблему, кодировав iv и ключ в base64 (используя этот гем: https://ruby-doc.org/stdlib-2.5.3/libdoc/base64/rdoc/Base64.html), перед тем как сохранение его в файл, а затем расшифровка после чтения из файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...