Ich versuche, Hash in Ruby zu verschlüsseln und zu entschlüsseln, indem Sie ActiveSupport::MessageEncryptor
verwenden. Erstens ich Hash erstellen und serialisiert werden:Ruby-Hash-Verschlüsselung
hash = { a: 1, b: 2 }
serialized_hash = Marshal.dump(hash) #=> "\x04\b{\a:\x06ai\x06:\x06bi\a"
Dann Krypta ich serialisiert hash:
salt = SecureRandom.random_bytes(64)
key = ActiveSupport::KeyGenerator.new('password').generate_key(salt) # => "\x89\xE0\x156\xAC..."
crypt = ActiveSupport::MessageEncryptor.new(key)
crypted_string = crypt.encrypt_and_sign(serialized_hash)
#=> "NHhLdDMwQS9MMkwwK1RFZjMyOFJNRXRkZ2VJY1o3aGtwaC9Wb0wvSnhmVT0tLW1nWTNqUElPWEdhMCsrMHI5R2FST2c9PQ==--01150a6eae1691887ace4164019fea2bd353f092"
Problem ist, dass ich es nicht entschlüsseln kann:
crypt.decrypt_and_verify(crypted_string)
ActiveSupport::MessageVerifier::InvalidSignature: ActiveSupport::MessageVerifier::InvalidSignature
from /home/user/.rvm/rubies/ruby-2.2.3/lib/ruby/gems/2.2.0/gems/activesupport-4.2.6/lib/active_support/message_verifier.rb:49:in `verify'
Aber manchmal funktioniert es. Wie kann ich es reparieren?
Ihr Verständnis von a ** Hash ** unterscheidet sich von meinem Verständnis von ** Hash **. Ist das eine Rubin Sache? Bewegen Sie die Maus über das * hash * -Tag, um mein Verständnis zu sehen. –
@ArtjomB. Ich denke Ruby nennt ihren hashmap/dict Datentyp ["hash"] (https://en.wikibooks.org/wiki/Ruby_Programming/Data_types#Hashes). – Paul