Я хочу закодировать свой JSON, используя метод шифрования JWEAlgorithm.A256KW A128CBC_HS256. ⇐ C#
Я хочу закодировать свой JSON, используя метод шифрования JWEAlgorithm.A256KW A128CBC_HS256.
До шифрования JSON
{ "идентификатор": 123, "name": "Джон Доу", "электронная почта": "[email protected]" } Выше приведен мой JSON. Я хочу закодировать его с помощью метода шифрования A128CBC_HS256. Я использую библиотеку JOSE и написал программу на .NET, и после шифрования результат показан ниже.
eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..RLfvl4qv3EXSj1Y3neqjIA.So5GH35GfPgdEUu5suxHT1AOnVLRUjAGyx4nNPCXqwZ0u7mjR8-8pRTF-2kS5ebwXn7wHXJQ СК--iPcqpA3V6g.XYIGsr61vkPnbyQdosEfAA Расшифрованные данные:
{ "идентификатор": 123, "name": "Джон Доу", "электронная почта": "[email protected]" } //пример файла JSON
Но формат, который мне нужен, приведен ниже. Как мне этого добиться?
{ "protected": "eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0", "получатели": [ { "encrypted_key": "QjWegxJgI7xt3N4bLdVc89hrekEJNcPGDssI442QXnPDfwVijt9McA" } ], "iv": "oGpW5BEZFruVlCq_tZHZjA", "tag": "ypX3FtY5L5sKjORb-lJEFg", "ciphertext": "ndyWxy4Csv2jcDdIfWsMUBreXJ8VlFtLCdz9x_qsIgo" } Мой код .NET ниже передает мой образец json в виде обычного текста и ключа в качестве keyGenerator
с использованием Хосе; использование системы; использование System.Collections.Generic; используя System.Linq; использование System.Security.Cryptography; использование System.Text; использование System.Threading.Tasks; пространство имен EncryptingAndDecryptingStringInCSharp { общедоступный статический класс JWTEncode { частный статический байт только для чтения [] Salt = новый байт[] { 10, 20, 30, 40, 50, 60, 70, 80 }; общедоступный статический байт[] GenerateEncryptionKey() { const int Итерации = 300; var keyGenerator = new Rfc2898DeriveBytes("BECEDE9F047E88314D6A9347B90E2BECF2AF3805F5DCE0DC2DA33713884A1D9A", Salt, Iterations); вернуть keyGenerator.GetBytes(32); строка keyString = "BECEDE9F047E88314D6A9347B90E2BECF2AF3805F5DCE0DC2DA33713884A1D9A"; вернуть Encoding.ASCII.GetBytes(keyString); // Генерируем 256-битный (32-байтовый) ключ шифрования вар шифрованияКлюч = новый байт [32]; используя (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(encryptionKey); } вернуть ключ шифрования; } общедоступный статический байт[] GenerateInitializationVector() { // Генерируем 128-битный (16-байтовый) вектор инициализации (IV) вар iv = новый байт[16]; используя (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(iv); } возврат IV; } общедоступная статическая строка EncryptA128CbcHs256 (открытый текст строки, ключ byte[], byte[] iv) { // Шифруем открытый текст, используя A128CBC-HS256 IDictionary dicIV = new Dictionary() { { "iv", iv } }; //var token = JWT.Encode(plaintext, key, JweAlgorithm.DIR, JweEncryption.A128CBC_HS256, extraHeaders: dicIV); var token = JWT.Encode(открытый текст, ключ, JweAlgorithm.A256KW, JweEncryption.A128CBC_HS256); вернуть токен; } общедоступная статическая строка DecryptA128CbcHs256 (строковый токен, ключ byte[], byte[] iv) { // Шифруем открытый текст, используя A128CBC-HS256 IDictionary dicIV = new Dictionary() { { "iv", iv } }; // Расшифровываем токен с помощью A128CBC-HS256 RSAES OAEP var decrypted = Jose.JWT.Decode(токен, ключ, JweAlgorithm.A256KW, JweEncryption.A128CBC_HS256); возврат в расшифрованном виде; } } } что нужно сделать, чтобы получить нужный формат с этими тегами "protected", "encrypted_key", IV, tag, зашифрованный текст?
До шифрования JSON
{ "идентификатор": 123, "name": "Джон Доу", "электронная почта": "[email protected]" } Выше приведен мой JSON. Я хочу закодировать его с помощью метода шифрования A128CBC_HS256. Я использую библиотеку JOSE и написал программу на .NET, и после шифрования результат показан ниже.
eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..RLfvl4qv3EXSj1Y3neqjIA.So5GH35GfPgdEUu5suxHT1AOnVLRUjAGyx4nNPCXqwZ0u7mjR8-8pRTF-2kS5ebwXn7wHXJQ СК--iPcqpA3V6g.XYIGsr61vkPnbyQdosEfAA Расшифрованные данные:
{ "идентификатор": 123, "name": "Джон Доу", "электронная почта": "[email protected]" } //пример файла JSON
Но формат, который мне нужен, приведен ниже. Как мне этого добиться?
{ "protected": "eyJhbGciOiJBMjU2S1ciLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0", "получатели": [ { "encrypted_key": "QjWegxJgI7xt3N4bLdVc89hrekEJNcPGDssI442QXnPDfwVijt9McA" } ], "iv": "oGpW5BEZFruVlCq_tZHZjA", "tag": "ypX3FtY5L5sKjORb-lJEFg", "ciphertext": "ndyWxy4Csv2jcDdIfWsMUBreXJ8VlFtLCdz9x_qsIgo" } Мой код .NET ниже передает мой образец json в виде обычного текста и ключа в качестве keyGenerator
с использованием Хосе; использование системы; использование System.Collections.Generic; используя System.Linq; использование System.Security.Cryptography; использование System.Text; использование System.Threading.Tasks; пространство имен EncryptingAndDecryptingStringInCSharp { общедоступный статический класс JWTEncode { частный статический байт только для чтения [] Salt = новый байт[] { 10, 20, 30, 40, 50, 60, 70, 80 }; общедоступный статический байт[] GenerateEncryptionKey() { const int Итерации = 300; var keyGenerator = new Rfc2898DeriveBytes("BECEDE9F047E88314D6A9347B90E2BECF2AF3805F5DCE0DC2DA33713884A1D9A", Salt, Iterations); вернуть keyGenerator.GetBytes(32); строка keyString = "BECEDE9F047E88314D6A9347B90E2BECF2AF3805F5DCE0DC2DA33713884A1D9A"; вернуть Encoding.ASCII.GetBytes(keyString); // Генерируем 256-битный (32-байтовый) ключ шифрования вар шифрованияКлюч = новый байт [32]; используя (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(encryptionKey); } вернуть ключ шифрования; } общедоступный статический байт[] GenerateInitializationVector() { // Генерируем 128-битный (16-байтовый) вектор инициализации (IV) вар iv = новый байт[16]; используя (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(iv); } возврат IV; } общедоступная статическая строка EncryptA128CbcHs256 (открытый текст строки, ключ byte[], byte[] iv) { // Шифруем открытый текст, используя A128CBC-HS256 IDictionary dicIV = new Dictionary() { { "iv", iv } }; //var token = JWT.Encode(plaintext, key, JweAlgorithm.DIR, JweEncryption.A128CBC_HS256, extraHeaders: dicIV); var token = JWT.Encode(открытый текст, ключ, JweAlgorithm.A256KW, JweEncryption.A128CBC_HS256); вернуть токен; } общедоступная статическая строка DecryptA128CbcHs256 (строковый токен, ключ byte[], byte[] iv) { // Шифруем открытый текст, используя A128CBC-HS256 IDictionary dicIV = new Dictionary() { { "iv", iv } }; // Расшифровываем токен с помощью A128CBC-HS256 RSAES OAEP var decrypted = Jose.JWT.Decode(токен, ключ, JweAlgorithm.A256KW, JweEncryption.A128CBC_HS256); возврат в расшифрованном виде; } } } что нужно сделать, чтобы получить нужный формат с этими тегами "protected", "encrypted_key", IV, tag, зашифрованный текст?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение