首页 > 解决方案 > 如何加密 JWT 有效负载 javascript 并在 Ruby 中解密

问题描述

我正在尝试在 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

标签: javascriptrubyencryptionjwt

解决方案


不要重新发明轮子。有一个标准:加密的 JWT (JWE) => RFC7516。此外,正如 Holger Just 所提到的,您应该遵循最佳当前实践并避免使用不安全的算法。

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


推荐阅读