2015-12-29 2 views
-1

Я пытаюсь зашифровать хеш с использованием SHA512. но я получаю не могу преобразовать хеш в строку. Любая помощь приветствуется.как зашифровать значение хэша с помощью SHA512

hash=Hash.new 
hash={first_name:"hari", last_name:"prakash", mobile:"12345" } 
enc_hash= Digest::SHA2.new(512).digest(hash) 

, когда я делаю это я получаю

TypeError: can't convert Hash into String

Пожалуйста, руководство меня. любой учебный ресурс по этой теме приветствуется.

+0

SHA512, на самом деле любая криптографическая хэш-функция является ** не ** шифрованием. Шифрование подразумевает обратимость и использование ключа для этого. Кроме того, использование слова «хэш» для словаря является артефактом Perl и теперь Ruby, что просто вызывает путаницу. – zaph

+0

Ваш вопрос неясен. Прежде всего, что значит «зашифровать хэш»? Все известные алгоритмы шифрования работают с потоками октетов, потоками битов, потоками байтов или потоками символов. Нет алгоритмов шифрования, которые работают с графами объектов Ruby в памяти. И, во-вторых, SHA512 не является алгоритмом шифрования, поэтому вы не можете шифровать что-либо с ним, период. –

ответ

1

Как говорится в ошибке, дайджест работает со строками. Если вы хотите зашифровать его, вы можете сначала преобразовать его в строку:

Digest::SHA2.new(512).digest(hash.to_s) 
+0

это работало. но есть ли другой способ шифрования хэша, не преобразовывая его в строку. – hari

+0

@hari, не уверен, что шифрование обычного хэша выглядит с точки зрения реализации, не строгая его. – ndn

0

Возможно, вы хотите, чтобы хэш имел значения только внутри хэша?

hash.map { |k,v| hash[k] = Digest::SHA2.new(512).digest(v) } 
Смежные вопросы