【问题标题】:How to encrypt JWT payload javascript and decrypt in Ruby如何加密 JWT 有效负载 javascript 并在 Ruby 中解密
【发布时间】:2020-06-17 00:40:28
【问题描述】:

我正在尝试在 javascript 中加密 JWT 有效负载,然后在我的 Ruby 应用程序中对其进行解密。我找到了一个简单的 Ruby 加密/解密工具,但我不知道如何在 javascript 中进行加密。有没有办法在 javascript 中完成这种加密,以便我的 Ruby 后端可以解密它?

def encrypt(key)
    cipher = OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt
    cipher.key = Digest::SHA1.hexdigest key
    s = cipher.update(self) + cipher.final

    s.unpack('H*')[0].upcase
end

def decrypt(key)
    cipher = OpenSSL::Cipher.new('DES-EDE3-CBC').decrypt
    cipher.key = Digest::SHA1.hexdigest key
    s = [self].pack("H*").unpack("C*").pack("c*")

    cipher.update(s) + cipher.final
end

puts plain = 'confidential'           # confidential
puts key = 'secret'                   # secret
puts cipher = plain.encrypt(key)      # 5C6D4C5FAFFCF09F271E01C5A132BE89

puts cipher.decrypt('guess')          # raises OpenSSL::Cipher::CipherError
puts cipher.decrypt(key)              # confidential

【问题讨论】:

  • 您的示例中的密码选择非常过时并且很可能不安全。很多时候,JWT 也很难安全地实施,而且通常是不适合这项工作的工具。如果你仍然需要加密东西,如果可能的话,你不应该尝试自己不实现低级加密,而是使用更高级别的抽象,例如由 libsodium 提供(您可以在 Ruby 端与 rbnacl 一起使用,在 Javascript 中与 libsodium.js 一起使用。

标签: javascript ruby encryption jwt


【解决方案1】:

不要重新发明轮子。有一个标准:加密的 JWT (JWE) => RFC7516。 此外,正如 Holger Just 所说,您应该遵循 Best Current Practices 并避免使用不安全的算法。

https://jwt.io/ 列出了许多可以提供比通常签名令牌 (JWS) 更多的库。不幸的是,当时没有 Ruby 库支持 JWE。

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2020-08-03
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2017-01-02
    • 2020-05-31
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多