@Jigrain

Как расшифровать JSON Web Encryption?

Я создавал отдельную api на C# asp net, где из другой api мне нужно было принять информацию о пользователей и уже с ней делать какие-то операции. Информация была в виде JWT токена внутри которого был объект со всей информацией про пользователя зашифрованный в JSON Web Encryption.
С JWT все в полном порядке, однако JWE доставил мне хлопот и я до сих пор имею некоторые проблемы с ним.

var jweString ="Some token";

var key = Jose.Jwk.FromJson(
    "{\"kty\":\"RSA\",\"n\":\"ntd57wkcilkGdKXg2p7eOxojd431ds39STpw6QP8RSvTWn7q2mlUi6uYK6VqGq7aXzxbKpfyAm1hIWpAQ7KUBRpy1mcHpnN4piqGQJScLAANvrpr-ZHU4rEm5DAlPlZXGX4clVlVtST-KAtXFWEJuL5_fAk0LKEfQggSW051xul-zdyQF92VYB0SqPHz-Ct1SF115oMv1MBuhsdI_amMf7O7f3F59OKYKp1Qsea7GMMNv86IBnN9aaKzRaF6gJ-NX1uaGZeAECR6EDTgbWEJFIQiZI4PmB4f5HeQeHPGL1QAEHaJzWumtWEHwHgg-y9rqNJOUQ\",\"e\":\"AQAB\",\"d\":\"IioWf-Nl0Bv114EWK--fvPaSSlSuRy9nGykGwBerWvViMES8Ht4o4SG3SSv69mJFddZ1hWPJGdyM17MSv3zZeX-G07a1XofXuUn3SPsrzGjtbUuzvEZmN8ifnc0-8o6EFIvlF6p8iSca4udSYl-rA_OYWyTkEPjkQrwFuMvkE1E-xqY6y1jCBW7LYAe9aNVjruHhPP1g-aX4lNzCcTVZXVAFWTCQ83wJTNh-xAvsHNNEvP-C2MM0FxbJFPUwKyqDRPqtFHrEqz8OkttQ211u-3QQ\",\"p\":\"tcJ-9PwjlrxuwZ6uF-bghEXYTcVoCoY7UMjw1Lk39TSiRbLKybv-f-n77w4hvY2oPnmAfhfd_a9WQktoNutVom_5mKvRr7N5wGEdVXrDV6fMhzrOwBXSDWPwRZdQj8-3Q9C1a9JHI5LN5FYJYkFWGOREDzbsBl8VtGfFzxx3W_M\",\"q\":\"37iUqO0fatAn7y9HX4DOaDtQqtBn17abUg1wLqMVV0FVzZWMfnKr1hIXup0xv_U-8ouG1n-bhxPDqirLIGelRsSkpYGtQ83ymXqpdK9AmmC_SaOa3pg7oWhINzrnOUNQLjZ0iaHHJpz0H1-Aj6nOWtez5WnIZbW0ZHjDM9sAUas\",\"dp\":\"nZp_sXgsd9j-hL9OIAWfKrLRg2Yn9_A64KrMQPg18FXqW1tUAacUX-AJB1mOoimB-GIsq6mQYRe3SRbPz8cx4v8LQ3nBAYQzjz_mSqd_WLN0YtH4UpDZKak9v2ocfgbT12bS2SJlcxApndOIoX0b5cuQxEyQTloGnP7ag-MgEEc\",\"dq\":\"Z9OS8n7xuLGYBvIrLpBpuofknRGRT9RIayEfchVvnwoMVxfTlw-C3huRdaLkZtDbgNbuIfgg5uRuRzgLAyP22UwDmWgAUFpw_3ek0ylOUxcZT4SlKC8AZZ0u_qrQiovJ11igZwt0kGABD9pToNjOkuxOaebZARL-AC7ncNZvZHc\",\"qi\":\"KJRew1EyAVjke_6b6lwvRjVdgl7xftbrKq9tE62Om7saLMlGbGDbFqRyvuN8c4d91ZlzoshkDHaoYslsFWCCzX6aabY6h9nc6XjYsG7kwopfooStOKvUPnxDyaXOy7or82fI0arg53Pb0OCbAWQ\"}", JWT.DefaultSettings.JsonMapper);

var data = JWE.Decrypt(jweString, key);


При помощи библиотеки Jose, мне удалось расшифровать информацию используя следующую конструкцию кода. Однако помимо этого я хотел сделать обратную операцию (зашифровать информацию), а так же брать ключи из файлов .pem а не вставлять их в виде строки.
Может кто-то помочь накидать код?
  • Вопрос задан
  • 279 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Вот в самом репозитории Jose есть пример использования x509:
var payload = new Dictionary<string, object>()
{
    { "sub", "mr.x@contoso.com" },
    { "exp", 1300819380 }
};

var privateKey=new X509Certificate2("my-key.p12", "password", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;

string token=Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256);


У X509Certificate2 есть метод с говорящим названием: CreateFromPemFile
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы