Как зашифровать полезную нагрузку JWT javascript и расшифровать в Ruby - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь зашифровать полезную нагрузку JWT в javascript, а затем расшифровать ее в моем Ruby приложении. Я нашел простой Ruby инструмент шифрования / дешифрования, но я не знаю, как сделать шифрование на стороне javascript. Есть ли способ выполнить sh это шифрование в 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

1 Ответ

0 голосов
/ 05 марта 2020

Не изобретайте велосипед. Для этого есть стандарт: зашифрованный JWT (JWE) => RFC7516 . Более того, как отмечает Holger Just, вы должны следовать Best Current Practices и избегать необеспеченных алгоритмов.

https://jwt.io/ перечисляет множество библиотек, которые могут предложить больше чем обычные подписанные токены (JWS). К сожалению, в то время библиотека Ruby не поддерживала JWE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...