如何在Ruby中加密JWT负载javascript和解密

如何在Ruby中加密JWT负载javascript和解密,javascript,ruby,encryption,jwt,Javascript,Ruby,Encryption,Jwt,我正在尝试用javascript加密JWT负载,然后在我的Ruby应用程序中解密它。我发现了一个简单的Ruby加密/解密工具,但我不知道如何在javascript中进行加密。有没有办法用javascript实现这种加密,这样我的Ruby后端就可以对其进行解密 def encrypt(key) cipher = OpenSSL::Cipher.new('DES-EDE3-CBC').encrypt cipher.key = Digest::SHA1.hexdigest key

我正在尝试用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(JWE)=>。 此外,正如Holger Just所提到的,您应该遵循并避免不安全的算法


列出了许多库,它们可以提供比通常的签名令牌(JW)更多的功能。不幸的是,当时没有Ruby库支持JWE。

您的示例中的密码选择非常过时,很可能不安全。通常情况下,JWT也很难安全地实现,而且常常是错误的工作工具。如果您仍然需要加密内容,如果可能的话,您不应该尝试自己实现低级加密,而应该使用更高级的抽象,例如libnaude提供的抽象(您可以在Ruby端和Javascript中使用它)。