【问题标题】:Ruby hash encryptingRuby 哈希加密
【发布时间】:2016-04-04 17:33:42
【问题描述】:

我尝试使用 ActiveSupport::MessageEncryptor 在 Ruby 中加密和解密哈希。首先我创建并序列化哈希:

hash = { a: 1, b: 2 }
serialized_hash = Marshal.dump(hash) #=> "\x04\b{\a:\x06ai\x06:\x06bi\a"

然后我加密序列化哈希:

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"

问题是我无法解密:

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'

但是,有时它会起作用。我该如何解决?

【问题讨论】:

  • 您对 hash 的理解与我对 hash 的理解不同。这是红宝石吗?将鼠标悬停在 hash 标记上以查看我的理解。
  • @ArtjomB。我认为 Ruby 称他们的 hashmap / dict 数据类型为"hash"
  • 需要 json 库,然后调用 { foo: :bar }.to_json。简化加密,并且很容易在解密时解析回哈希。

标签: ruby-on-rails ruby encryption activesupport


【解决方案1】:

对我来说很好,添加最后一步会给我原始哈希

result = crypt.decrypt_and_verify(crypted_string)
Marshal.load(result)

【讨论】:

    【解决方案2】:

    确保使用相同的键/盐。如果您在控制台中尝试,问题很可能出在变量名 encrypted_stringcrypted_string = ...

    【讨论】:

      【解决方案3】:

      与上一个命令中用作参数的名称相比,您使用了不同的变量名称。以下命令对我有用:

      crypt.decrypt_and_verify(crypted_string)
      

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-03
        • 2011-12-03
        相关资源
        最近更新 更多