2015-05-03 3 views
0

Мне нужно сохранить объект Digest :: SHA512 в файл в двоичный формат.
Это казалось тривиальным, но все, что я пробовал, просто написал его как шестнадцатеричную строку.
Я ожидал следующий код для работы:Ruby: Как написать дайджест в файл в двоичном формате

bindigest=digest.update(chall) 
File.open('sha1.bin', 'wb') {|file| file.write(bindigest) } 

но это не делает: это преобразовать в обычный текст.
Аналогичный вопрос кажется без ответа: Can I serialize a ruby Digest::SHA1 instance object?

Использование распаковывать инструменты требуют перевода на BIGINT в двоичную строку, которая снова не тривиальна ... Любое предложение?

Спасибо заранее!

ответ

2

to_s method из Digest возвращает шестнадцатеричное кодирование хэша, так это то, что вы получаете по умолчанию при попытке вывести его (так как рубин будет использовать to_s при написании). Для того, чтобы получить сырой двоичный, используйте digest:

digest = Digest::SHA512.new 
digest.update(chall) 
File.open('sha1.bin', 'wb') { |file| file.write(digest.digest) } 

В качестве альтернативы можно использовать class method version of digest если вы не вычисления хэш в кусках:

digest = Digest::SHA512.digest(chall) 
File.open('sha1.bin', 'wb') { |file| file.write(digest) } 
+0

работал отлично, танк вам Мэтта !! – sbos61