javascript - 如何加密 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
解决方案
不要重新发明轮子。有一个标准:加密的 JWT (JWE) => RFC7516。此外,正如 Holger Just 所提到的,您应该遵循最佳当前实践并避免使用不安全的算法。
https://jwt.io/列出了许多可以提供比通常签名令牌 (JWS) 更多的库。不幸的是,当时没有 Ruby 库支持 JWE。
推荐阅读
- python-3.x - 如何通过 celery 配置为 RabbitMQ 中的队列分配优先级?
- java - 数字平方和
- javascript - 我用 create-react-app 创建了一个项目。在我的 Windows pc 上,但是当尝试在命令行上运行 npm start 时,它显示此错误。请帮助我
- regex - 某些特殊字符仅在它们前面有转义字符时才允许使用
- android - 如何在我当前的注册代码旁边验证 CheckBox?- 安卓工作室
- javascript - 如何忽略未使用参数的类型检查?
- javascript - ReferenceError:未定义名字 - JavaScript
- javascript - 如果出现 pg 错误,表示服务器关闭
- javascript - PhpStorm 实时编辑功能不起作用?[PhpStorm 2020.2]
- flutter - 如何返回 flotter 地理定位器位置值?(编程语言:飞镖)