【发布时间】: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