Згд расшифровка: ЗГД | это… Что такое ЗГД?

Что такое згд — Значение слов «згд»

Что такое згд — Значение слов «згд»

Ищут сейчас

    Сейчас на сайте

    наш ЧАТ на Телеграм
    наш канал на Телеграм

    Популярное за сегодня

     рарный
     котакбас
     роцк
     оффник
     троллинг
     черкаш
     пердос
     чиназес
     Ой-бой
     легит
     Заны
     фарту
     баребух
     ролить
     водник
     лилла
     Слпвм
     кирять
     стафф
     краш


    Последние запросы

    эдлиб • шибздик • шарага • чугунда • фитоняшка • троллинг • тиреч • сьюха • стелит • слайм • сиповать • самка • рашить • порядочный • пасет • памп • отчим • открополить • ой-бой • малолетний дебил • казик • кавабанга • запустить карася • зайбал • дрочишь • дрочит • догонять • дабл кап • вебмастер •


    Обьясните людям?

    пимпить • биггить • бигить • чугунда • паппать • зафидил • чупеп • гамзик • капибара • топитоп • ратибор • нижмид • мать ебал • бурмулда • эротишно • шматра • флэты • тууй • путин лох • пизда тебе • паппить • джокать • беблух • чебоданки • цумадинка • хекан • факаюсь • стребл • спотать • слпвнм • рокать • растабойшан • рандоно • путлер капут • пуляночка • птичьей • папать • охамутала • олджэ • напрокид • мптришка • лобочесы • кифл • защиканка • заряженная девушка • заклубиться • жмыхнуть • дядя миша • добнуть • джига •

    Слова по темам


    Что такое

    згд — Значение слов «згд»

    развернуть всёсвернуть всё

    Найти полет в отпуск до $100 из:
    Leverkusen Mitte Схипхол Франкфурт-на-Майне Кельн-Бонн Брюссель Мюнстер Падерборн Кальден Шарлеруа Люксембург Нидеррхейн Дерне Бирсет Роттердам Маастрихт Дюссельдорф Дортмунд Эйндховен Ханн


    ЗГД,  аббрев.  (геймеры, РПГ, «Perfect World»)          

    значение: локация Запад Города Драконов в игре «Perfect World».

    Славится большим количеством котов и лагов в пис-зоне, является фри-PvP зоной на многих серверах.
    пример текста: А я тут на ЗГД фанюсь.

    #PerfectWorld

    см. также: ГД, Гуй, ХХ
    рядом по алфавиту:

    • ЗГД
    • ЗГБ
    • ЗГД
    • згот

    XAKEP13

    Поправочка!  Все не так! 




    Слова на тему:
    • Прист

      раса (тип персонажей) в он-лайн игре «Perfect World». Официальное название расы — Сиды.

    • ХХ

      Одно из подземелий «Perfect World». В нем добываются (

    • Иксы

      см. ХХ

    • Гуй

      Ущелье Гуй-Му в

    • Грин

      Один из типов снаряжения в

    • ГД

      лок. ..

    • ЗГД

      лок…

    • Син

      Класс «убийцы» расы амфибий в игре «Perfect World». Сины носят кинжалы и могут уходить в

    • Бао

      «Легендарный питомец», считающийся лучшим

    • Прист

      класс персонажей в некоторых РПГ. В частности, в «World of WarСraft» и «Lineage 2».

    • ПВХ

      аббревиатура названия оружия «Поиск Вечных Хлопот» — пращи на 95

    • Оранж

      наилучший (и самый дорогой) тип снаряжения в ММоРПГ «Perfect World». Оранжем могут быть

    • Пит

      моб

    • Скилл

      в ММоРПГ «Perfect World» — магическое заклинание, используемое игроком для увеличения урона пр…

    • Хилл

      особый скил…

    • Пуха

      оружие, дающее дополнительный урон к основной атаке персонажа по

    • Фен

      легендарный питомец «Пылающий крошка феникс» в ММоРПГ «Perfect World» Уточнение: Амфетамин (не…

    • Заточка

      данное слово употребляется в ММоРПГ «Perfect World». Материал, наносимый на

    • Сид

      представитель сидов, одной из четырех рас в ММоРПГ «Perfect World». Раса сидов делится на 2 кл…

    • Инвиз

      умение сина с…

    • РРРФ

      Группа

    • ХАГ

      Группа

    • Миста

      в игре «Perfect world» это сокращенное название расы древних, а именно подрасы мистиков, чаще …

    Ищут сейчас

      Сейчас на сайте

      На удачу

      Добавить слово



       

       

      обсудить в чате в Телеге


      Последние Изменения

       кринж
       <3
       Мдэ
       нагнуть
       Олдсоукоку
       ËБА
       Дурковать
       вздрохнуть
       чепушила
       джокать
       Хв
       Попаянный
       цинус
       тян без пруфов
       Хоттабыч
       Зиг хайль
       СЛП
       Загномить
       мкад
       овнуть


      Популярное за сегодня

       рарный
       котакбас
       роцк
       оффник
       троллинг
       черкаш
       пердос
       чиназес
       Ой-бой
       легит
       Заны
       фарту
       баребух
       ролить
       водник
       лилла
       Слпвм
       кирять
       стафф
       краш


      Обьясните людям?

      пимпить • биггить • бигить • чугунда • паппать • зафидил • чупеп • гамзик • капибара • топитоп • ратибор • нижмид • мать ебал • бурмулда • эротишно • шматра • флэты • тууй • путин лох • пизда тебе • паппить • джокать • беблух • чебоданки • цумадинка • хекан • факаюсь • стребл • спотать • слпвнм • рокать • растабойшан • рандоно • путлер капут • пуляночка • птичьей • папать • охамутала • олджэ • напрокид • мптришка • лобочесы • кифл • защиканка • заряженная девушка • заклубиться • жмыхнуть • дядя миша • добнуть • джига •

      Последние Изменения

       кринж
       <3
       Мдэ
       нагнуть
       Олдсоукоку
       ËБА
       Дурковать
       вздрохнуть
       чепушила
       джокать
       Хв
       Попаянный
       цинус
       тян без пруфов
       Хоттабыч
       Зиг хайль
       СЛП
       Загномить
       мкад
       овнуть

      Интересные определения:

      Фикрайтеры — это создатели фанфиков, а фикридеры — их читатели.

      Батл у хиппи означает бутылка (от англ. bottle), а в субкультуре хип-хоп батл — соревнование, состязание (от англ. battle — битва).

      Трюкеры — обобщённое название трейсеров (паркура), байкеров, файерщиков, роллеров, скейтеров, (список нуждается в дополнении) и других молодёжных неформальных движений уличного экстремального спорта.




      дополнительные сведения», используемые при заполнении форм «Сведения о страховом стаже застрахованных лиц (СЗВ-СТАЖ), «Данные о корректировке сведений, учтенных на индивидуальном лицевом счете застрахованного лица… \ КонсультантПлюс

      Коды «Исчисление страхового стажа: дополнительные

      сведения», используемые при заполнении форм «Сведения

      о страховом стаже застрахованных лиц (СЗВ-СТАЖ), «Данные

      о корректировке сведений, учтенных на индивидуальном

      лицевом счете застрахованного лица (СЗВ-КОРР), формы

      «Сведения о заработке (вознаграждении), доходе, сумме

      выплат и иных вознаграждений, начисленных и уплаченных

      страховых взносах, о периодах трудовой и иной

      деятельности, засчитываемых в страховой

      стаж застрахованного лица (СЗВ-ИСХ)»

      Код

      Полное наименование

      Акт законодательства

      Срок действия кода

      ДЕТИ

      Отпуск по уходу за ребенком

      Абзац пятый статьи 256 Трудового кодекса Российской Федерации . Статья 10 Закона Российской Федерации от 20 ноября 1990 г. N 340-1 «О государственных пенсиях в Российской Федерации» .

      с 01.01.1996 по 31.12.2001

      Абзац пятый статьи 256 Трудового кодекса Российской Федерации. Подпункт 3 пункта 1 статьи 11 Федерального закона от 17.12.2001 N 173-ФЗ «О трудовых пенсиях в Российской Федерации» . Подпункт 2 пункта 2 статьи 1 Федерального закона от 21.03.2005 N 18-ФЗ «О средствах федерального бюджета, выделяемых Пенсионному фонду Российской Федерации на возмещение расходов по выплате страховой части трудовой пенсии по старости, трудовой пенсии по инвалидности и трудовой пенсии по случаю потери кормильца отдельным категориям граждан»

      с 01.01.2002 по 31.12.2014

      Абзац 5 статьи 256 Трудового кодекса Российской Федерации.

      с 01.01.2015

      Пункт 3 части 1 статьи 12 Федерального закона от 28.12.2013 N 400-ФЗ «О страховых пенсиях» .

      Подпункт 2 пункта 2 статьи 1 Федерального закона от 21. 03.2005 N 18-ФЗ «О средствах федерального бюджета, выделяемых Пенсионному фонду Российской Федерации на возмещение расходов по выплате страховой части трудовой пенсии по старости, трудовой пенсии по инвалидности и трудовой пенсии по случаю потери кормильца отдельным категориям граждан»

      ДЕКРЕТ

      Отпуск по беременности и родам

      Пункт «в» статьи 92 Закона Российской Федерации от 20 ноября 1990 г. N 340-1 «О государственных пенсиях в Российской Федерации»

      с 01.01.1996 по 31.12.2001

      Абзац первый статьи 255 Трудового кодекса Российской Федерации . Подпункт 2 пункта 1 статьи 11 Федерального закона от 17.12.2001 N 173-ФЗ «О трудовых пенсиях в Российской Федерации»

      с 01.01.2002 по 31.12.2014

      Пункт 2 части 1 статьи 12 Федерального закона от 28.12.2013 N 400-ФЗ «О страховых пенсиях»

      с 01.01.2015

      ДОГОВОР

      Работа по договорам гражданско-правового характера, в том числе выходящая за рамки отчетного (расчетного) периода

      Пункт 2 статьи 425 части 1 Гражданского кодекса Российской Федерации «Действие договора»

      с 01. 01.2002

      УВПЕРИОД

      Работа в рамках увеличенного расчетного периода

      Абзац второй пункта 2 статьи 23 Федерального закона от 15.12.2001 N 167-ФЗ «Об обязательном пенсионном страховании в Российской Федерации» .

      с 01.01.2002 по 31.12.2009

      ДЛОТПУСК

      Пребывание в оплачиваемом отпуске

      Статьи 114 — 116 Трудового кодекса Российской Федерации

      с 01.02.2002

      АДМИНИСТР

      Отпуск без сохранения содержания

      Статья 128 Трудового кодекса Российской Федерации

      с 01.01.1996 по 31.12.2001

      с 01.01.2010 по 31.12.2016

      ВРНЕТРУД

      Период временной нетрудоспособности

      Подпункт 2 пункта 1 статьи 11 Федерального закона от 17.12.2001 N 173-ФЗ «О трудовых пенсиях в Российской Федерации»

      с 01. 01.2010 по 31.12.2014

      Пункт 2 части 1 статьи 12 Федерального закона от 28.12.2013 N 400-ФЗ «О страховых пенсиях»

      с 01.01.2015

      ВАХТА

      Время вахтового отдыха

      Абзац первый пункта 8 постановления Правительства Российской Федерации от 11.07.2002 N 516 «Об утверждении Правил исчисления периодов работы, дающей право на досрочное назначение трудовой пенсии по старости в соответствии со статьями 27 и 28 Федерального закона «О трудовых пенсиях в Российской Федерации».

      Статья 300 Трудового кодекса Российской Федерации

      с 01.01.2014

      МЕСЯЦ

      Перевод работника с работы, дающей право на досрочное назначение трудовой пенсии по старости, на другую работу, не дающую право на указанную пенсию, в той же организации по производственной необходимости на срок не более одного месяца в течение календарного года

      Абзац первый пункта 9 постановления Правительства Российской Федерации от 11. 07.2002 N 516 «Об утверждении Правил исчисления периодов работы, дающей право на досрочное назначение трудовой пенсии по старости в соответствии со статьями 27 и 28 Федерального закона «О трудовых пенсиях в Российской Федерации».

      Абзацы второй и третий статьи 72.2 Трудового кодекса Российской Федерации

      с 01.01.2014

      КВАЛИФ

      Повышение квалификации с отрывом от производства

      Статья 187 Трудового кодекса Российской Федерации

      с 01.01.2014

      ОБЩЕСТ

      Исполнение государственных или общественных обязанностей

      Статья 170 Трудового кодекса Российской Федерации

      с 01.01.2014

      СДКРОВ

      Дни сдачи крови и ее компонентов и предоставленные в связи с этим дни отдыха

      Статья 186 Трудового кодекса Российской Федерации

      с 01.01.2014

      ОТСТРАН

      Отстранение от работы (недопущение к работе) не по вине работника

      Абзац десятый статьи 76 Трудового кодекса Российской Федерации.

      с 01.01.2014

      ПРОСТОЙ

      Время простоя по вине работодателя

      Абзац девятый пункта 9 Правил исчисления периодов работы, дающей право на досрочное назначение трудовой пенсии по старости в соответствии со статьями 27 и 28 Федерального закона «О трудовых пенсиях в Российской Федерации», утвержденных постановлением Правительства Российской Федерации от 11.07.2002 N 516.

      Абзацы первый и второй статьи 157 Трудового кодекса Российской Федерации

      с 01.01.2014

      УЧОТПУСК

      Дополнительные отпуска работникам, совмещающим работу с обучением

      Статьи 173 — 177 Трудового кодекса Российской Федерации

      с 01.01.2014

      МЕДНЕТРУД

      Период работы, соответствующий переводу в соответствии с медицинским заключением беременной женщины по ее заявлению с работы, дающей право на досрочное назначение трудовой пенсии по старости, на работу, исключающую воздействие неблагоприятных производственных факторов, а также период, когда беременная женщина не работала до решения вопроса о ее трудоустройстве в соответствии с медицинским заключением

      Пункт 12 Правил исчисления периодов работы, дающей право на досрочное назначение трудовой пенсии по старости в соответствии со статьями 27 и 28 Федерального закона «О трудовых пенсиях в Российской Федерации», утвержденных постановлением Правительства Российской Федерации от 11. 07.2002 N 516.

      Абзацы первый и второй статьи 254 Трудового кодекса Российской Федерации

      с 01.01.2014

      НЕОПЛДОГ

      Период работы застрахованного лица по гражданско-правовому договору

      Период работы застрахованного лица по гражданско-правовому договору, выплаты и иные вознаграждения за который начислены в следующие отчетные периоды

      с 01.01.2014

      НЕОПЛАВТ

      Период работы застрахованного лица по авторскому договору

      Период работы застрахованного лица по авторскому договору, а также по договору с авторами произведений, получившими выплаты и иные вознаграждения по договорам об отчуждении исключительного права на произведения науки, литературы, искусства, издательским лицензионным договорам, лицензионным договорам о предоставлении права использования произведений науки, литературы, искусства, выплаты и иные вознаграждения за который начислены в следующие отчетные периоды

      с 01. 01.2014

      ДОПВЫХ

      Дополнительные выходные дни лицам, осуществляющим уход за детьми-инвалидами.

      Статья 262 Трудового кодекса Российской Федерации

      с 01.01.2014

      ЗГДС

      Сведения о замещении лицом государственной должности субъекта Российской Федерации на постоянной основе

      Часть 1.1 статьи 8 Федерального закона от 28 декабря 2013 года N 400-ФЗ «О страховых пенсиях»

      с 01.01.2017

      ЗГД

      Сведения о замещении лицом государственной должности Российской Федерации

      Часть 1.1 статьи 8 Федерального закона от 28 декабря 2013 года N 400-ФЗ «О страховых пенсиях»

      с 01.01.2017

      ЗГГС

      Сведения о замещении лицом должности государственной гражданской службы Российской Федерации

      Часть 1.1 статьи 8 Федерального закона от 28 декабря 2013 года N 400-ФЗ «О страховых пенсиях»

      с 01. 01.2017

      ЗМС

      Сведения о замещении лицом должности муниципальной службы

      Часть 1.1 статьи 8 Федерального закона от 28 декабря 2013 года N 400-ФЗ «О страховых пенсиях»

      с 01.01.2017

      ЗМД

      Сведения о замещении лицом муниципальной должности на постоянной основе

      Часть 1.1 статьи 8 Федерального закона от 28 декабря 2013 года N 400-ФЗ «О страховых пенсиях»

      с 01.01.2017

      ———————————

      <45> Собрание законодательства Российской Федерации, 2002, N 1, ст. 3; 2006, N 27, ст. 2878; 2010, N 52, ст. 7002; 2013, N 14, ст. 1668; N 27, ст. 3477; 2014, N 30, ст. 4217.

      <46> Ведомости Съезда народных депутатов РСФСР и Верховного Совета РСФСР, 1990, N 27, ст. 351.

      <47> Собрание законодательства Российской Федерации, 2001, N 52, ст. 4920; 2002, N 30, ст. 3033; 2008, N 30, ст. 3602; 2009, N 30, ст. 3739; 2011, N 49, ст. 7039; 2013, N 52, ст. 6992.

      <48> Собрание законодательства Российской Федерации, 2005, N 13, ст. 1076; 2008, N 30, ст. 3602; 2009, N 30, ст. 3739; 2013, N 52, ст. 6992.

      <49> Собрание законодательства Российской Федерации, 2013, N 52, ст. 6965; 2015, N 27, ст. 3964; 2016, N 1, ст. 5.

      <50> Ведомости Съезда народных депутатов РСФСР и Верховного Совета РСФСР, 1990, N 27, ст. 351.

      <51> Собрание законодательства Российской Федерации, 2002, N 1, ст. 3; 2006, N 27, ст. 2878.

      <52> Собрание законодательства Российской Федерации, 1994, N 32, ст. 3301; 2002, N 48, ст. 4737; 2003, N 2, ст. 167; 2005, N 1, ст. 39; 2007, N 27, ст. 3213; N 31, ст. 3993; N 41, ст. 4845; 2008, N 30, ст. 3616; 2009, N 1, ст. 14; 2011, N 49, ст. 7041; N 50, ст. 7347; 2013, N 51, ст. 6687; 2014, N 11, ст. 1100; N 19, ст. 2304; 2015, N 10, ст. 1412.

      <53> Собрание законодательства Российской Федерации, 2001, N 51, ст. 4832; 2002, N 22, ст. 2026; 2003, N 1, ст. 2, 13; N 52, ст. 5037; 2004, N 27, ст. 2711; N 30, ст. 3088; N 49, ст. 4854, 4856; 2005, N 1, ст. 9; N 45, ст. 4585; 2006, N 31, ст. 3436; 2007, N 30, ст. 3754; 2008, N 18, ст. 1942; N 30, ст. 3602, 3616; 2009, N 1, ст. 12; 2009, N 30, ст. 3739.

      <54> Собрание законодательства Российской Федерации, 2002, N 1, ст. 3; N 30, ст. 3014, 3033; 2003, N 27, ст. 2700; 2004, N 18, ст. 1690; N 35, ст. 3607; 2005, N 1, ст. 27; N 19, ст. 1752; 2006, N 27, ст. 2878.

      <5> Собрание законодательства Российской Федерации, 2002, N 1, ст. 3; N 30, ст. 3033; 2003, N 27, ст. 2700; 2006, N 27, ст. 2878; 2013, N 27, ст. 3449; 2016, N 27, ст. 4238.

      <56> Собрание законодательства Российской Федерации, 2002, N 28, ст. 2872; 2009, N 22, ст. 2725; 2013, N 13, ст. 1559.

      <57> Собрание законодательства Российской Федерации, 2002, N 1, ст. 3; N 30, ст. 3014, 3033; 2003, N 27, ст. 2700; 2004, N 18, ст. 1690; N 35, ст. 3607; 2005, N 1, ст. 27; N 19, ст. 1752; 2006, N 27, ст. 2878.

      <58> Собрание законодательства Российской Федерации, 2013, N 52, ст. 6965; 2015, N 27, ст. 3964; 2016, N 1, ст. 5, N 22, ст. 3091.

      Как декодировать base64 в GIF в python?

      Задавать вопрос

      спросил

      Изменено 1 год, 7 месяцев назад

      Просмотрено 712 раз

      У меня есть API-интерфейс python flask-restful, я пытаюсь добавить функцию, позволяющую пользователям загружать GIF-файлы, для этого клиент будет загружать GIF-файл в кодировке base64 в API, поэтому в API мне нужно иметь возможность декодировать base64 в GIF, а также иметь возможность выполнять над ним операции, такие как изменение размера и сжатие, а затем преобразовывать его в байты

      Я пытался сделать с PIL так:

       img_bytes = BytesIO()
      # Я указал продолжительность 67, потому что хочу, чтобы GIF воспроизводился со скоростью 15 кадров в секунду, 1000/15 = 66,66. 
      self.image.save(img_bytes, append_images=self.frames[1:], format=self.format, save_all=True,
                      оптимизировать = ложь, продолжительность = 67, цикл = 0)
      img_bytes.seek(0)
       

      Проблема с этой реализацией заключается в том, что я нахожу много искажений и черных пикселей в GIF-файлах и непостоянную частоту кадров / скорость анимации, в целом это довольно плохо, и это делает GIF размером 75 КБ равным 1,8 МБ, есть другие решения?

      • python
      • библиотека изображений python
      • gif
      • анимированный gif

      Попробуйте код ниже. Меня устраивает.

       из изображения импорта PIL
      импортировать base64
      импорт ОС
      myimagestring = "R0lGODlhkAGQAfcAAAAAAAAAMwAAZgAAmQAAzAAA/wArAAArMwArZgArmQArzAAr/wBVAABVMwBVZgBVmQBVzABV/wCAAACAMwCAZgCAmQCAzACA/wCqAACqMwCqZgCqmQCqzACq/wDVAADVMwDVZgDVmQDVzADV/wD/AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMrADMrMzMrZjMrmTMrzDMr/zNVADNVMzNVZjNVmTNVzDNV/zOAADOAMzOAZjOAmTOAzDOA/zOqADOqMzOqZjOqmTOqzDOq/zPVADPVMzPVZjPVmTPVzDPV/zP/ADP/MzP/ZjP/mTP/ zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YrAGYrM2YrZmYrmWYrzGYr/2ZVAGZVM2ZVZmZVmWZVzGZV/2aAAGaAM2aAZmaAmWaAzGaA/2aqAGaqM2aqZmaqmWaqzGaq/2bVAGbVM2bVZmbVmWbVzGbV/2b/AGb/M2b/Zmb/mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5krAJkrM5krZpkrmZkrzJkr/5lVAJlVM5lVZplVmZlVzJlV/5mAAJmAM5mAZpmAmZmAzJmA/5mqAJmqM5mqZpmqmZmqzJmq/5nVAJnVM5nVZpnVmZnVzJnV/5n/AJn/M5n/Zpn/mZn/ zJn//8wAAMwAM8wAZswAmcwAzMwA/8wrAMwrM8wrZswrmcwrzMwr/8xVAMxVM8xVZsxVmcxVzMxV/8yAAMyAM8yAZsyAmcyAzMyA/8yqAMyqM8yqZsyqmcyqzMyq/8zVAMzVM8zVZszVmczVzMzV/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8Amf8AzP8A//8rAP8rM/8rZv8rmf8rzP8r//9ВАП9ВМ/9ВЗв9Вмф9ВзП9В//+ААП+АМ/+АЗв+Амф+АзП+А//+qAP+qM/+qZv+qmf+qzP+q///ВАП/ВМ//ВЗв/Вмф/ВзП/В// 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"
      myimagedata = base64. b64decode(myimagestring)
      myimagefile = открыть («myimage.gif», «wb»)
      myimagefile.write(myimagedata)
      myimagefile.close()
      myimageobject = фотоизображение (файл = "myimage.gif")
       

      И вот функция изменения размера изображения при необходимости:

       из PIL import Image
      def get_resized_img (img_path, picture_size):
          img = Image.open(img_path)
          width, height = picture_size # это МАКСИМАЛЬНЫЕ размеры
          picture_ratio = ширина / высота
          img_ratio = img.size[0] / img.size[1]
          if picture_ratio >= 1: # картинка широкая
              if img_ratio <= picture_ratio: # изображение недостаточно широкое
                  width_new = int (высота * img_ratio)
                  size_new = ширина_новая, высота
              else: # изображение шире, чем изображение
                  height_new = int (ширина / img_ratio)
                  size_new = ширина, высота_новая
          else: # картинка высокая
              if img_ratio >= picture_ratio: # изображение недостаточно высокое
                  height_new = int (ширина / img_ratio)
                  size_new = ширина, высота_новая
              else: # изображение выше картинки
                  width_new = int (высота * img_ratio)
                  size_new = ширина_новая, высота
          вернуть img. resize(size_new, resample=Image.LANCZOS)
          
       

      3

      Зарегистрируйтесь или войдите в систему

      Зарегистрируйтесь с помощью Google

      Зарегистрироваться через Facebook

      Зарегистрируйтесь, используя адрес электронной почты и пароль

      Опубликовать как гость

      Электронная почта

      Требуется, но не отображается

      Опубликовать как гость

      Электронная почта

      Требуется, но не отображается

      python — Почему я получаю ValueError при попытке распаковать данные?

      Короче говоря, я разрабатываю зашифрованный чат с использованием ECDH + AES (исходный код на GitHub)

      Все алгоритмы шифрования и дешифрования работают просто отлично, когда я тестирую их по отдельности. Они также работают, когда установлено только одно соединение с сервером. Однако, когда подключено более одного сокета, я получаю эту ошибку.

       Трассировка (последний последний вызов):
        Файл "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\threading.py", строка 973, в _bootstrap_inner
          самозапуск()
        Файл "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\threading.py", строка 910, выполняется
          self._target(*self._args, **self._kwargs)
        Файл "C:\!GitLab\chat\client.py", строка 111, в прослушивателе
          открытый текст = self.client_cred.decrypt(
        Файл "C:\!GitLab\chat\ecdh.py", строка 105, в расшифровке
          вернуть unpadder.update(decrypted_data) + unpadder.finalize()
        Файл "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\cryptography\hazmat\primitives\padding.py", строка 159, в доработке
          результат = _byte_unpadding_check(
        Файл "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\site-packages\cryptography\hazmat\primitives\padding. py", строка 101, в _byte_unpadding_check
          поднять ValueError("Недопустимые байты заполнения")
      ValueError: Недопустимые байты заполнения.
       

      А вот и зашифруйте мой код шифрования/расшифровки:

       из cryptography.hazmat.backends import default_backend
      из cryptography.hazmat.primitives импортировать хэши, заполнение
      из cryptography.hazmat.primitives.ciphers импорт Шифр, алгоритмы, режимы
      из секретов импортировать token_bytes
      из cryptography.hazmat.primitives.kdf.hkdf импортировать HKDF
      сериализация импорта из cryptography.hazmat.primitives
      из cryptography.hazmat.primitives.aсимметричный импорт ec
      ФОРМАТ = 'utf-8'
      БЛОК_РАЗМЕР = 16
      класс ДХ:
          защита __init__(сам):
              self.ECDH = ec.generate_private_key(ec.SECP384R1(), default_backend())
              self.public_key = self.ECDH.public_key()
          def encrypt(self, public_key, открытый текст):
              """
              IV = 16 байт
              СОЛЬ = 16 байт
              Общий ключ = 48 байт
              Производный ключ = 32 байта
              AES = 256 бит
              AES = 32 байта
              Паддер = 128 или 256 бит
              Паддер = 16 или 32 байта
              Зашифрованный текст = IV + SALT + MSG
              :param public_key: еще один открытый ключ клиента
              :param plaintext: текст для шифрования
              :return: зашифрованный зашифрованный текст
              """
              IV = token_bytes(16)
              SALT = token_bytes(16)
              общий_ключ = self. ECDH.exchange(ec.ECDH(), открытый_ключ)
              производный_ключ = HKDF(
                  алгоритм=хэши.SHA256(),
                  длина=32,
                  соль=СОЛЬ,
                  информация = нет
              ).вывести(общий_ключ)
              шифратор = шифр(
                  алгоритмы.AES(derived_key),
                  режимы.CBC(IV)
              ).шифратор()
              
              # unpadder = padding.PKCS7(256).unpadder()
              padder = padding.PKCS7(128).padder()
              padded_data = padder.update(plaintext.encode(FORMAT)) + padder.finalize()
              вернуть IV + SALT + encryptor.update (дополненные_данные) + encryptor.finalize ()
          def расшифровать (я, открытый_ключ, зашифрованный текст):
              IV = зашифрованный текст[:16]
              СОЛЬ = зашифрованный текст[16:32]
              зашифрованный текст = зашифрованный текст[32:]
              общий_ключ = self.ECDH.exchange(ec.ECDH(), открытый_ключ)
              производный_ключ = HKDF(
                  алгоритм=хэши.SHA256(),
                  длина=32,
                  соль=СОЛЬ,
                  информация = нет
              ). вывести(общий_ключ)
              расшифровщик = шифр(
                  алгоритмы.AES(derived_key),
                  режимы.CBC(IV)
              ).расшифровщик()
              decrypted_data = decryptor.update(зашифрованный текст) + decryptor.finalize()
              
              # unpadder = padding.PKCS7(256).unpadder()
              unpadder = padding.PKCS7(128).unpadder()
              вернуть unpadder.update(decrypted_data) + unpadder.finalize()
       

      Сервер получает сообщение:

       msg = current_client.recv(2048)
       

      Расшифровывает:

       открытый текст = self.serv_cred.decrypt(
                          self.connection_dic.get(current_client),
                          сообщение
                      ).декодировать(ФОРМАТ)
       

      Шифрует его с помощью публичных ключей клиентов (которые хранятся в словаре) и отправляет участникам чата:

       для клиента, pub_k в self.connection_dic.items():
          зашифрованный текст = self.serv_cred.encrypt (pub_k, открытый текст)
          client.send(зашифрованный текст)
       

      Клиентская сторона получает сообщение:

       msg = self. client_socket.recv(2048)
       

      Расшифровывает это:

       открытый текст = self.client_cred.decrypt(
                                  self.server_public,
                                  сообщение
                              ).декодировать(ФОРМАТ)
       

      Шифрование на стороне клиента выглядит как

       зашифрованный текст = self.client_cred.encrypt(
                          self.server_public,
                          сообщение
                      )
       
      9)\x84\x82\xc1\xe1:7\xe9\x852e\xbf\x88k\xe5\xa0\x18V\x17?v;\xd1\xb9\xf76+[\xfd\xc1gp\xaa\nF\x9dY\xea\ х82′ dec Производное b»\x18\xaa>\xe5Tt\x89TD\n\xc3V(t\xa2V\xc9\x08\xb5\x8a’\xe9\xaep\x19{\x94Ck1_b» dec Unpadded b’Это тестовое сообщение, когда второй сокет пытается отправить сообщение!’

      Сервер шифрует сообщение и отправляет его Client1:

       msg = 'bob > Это тестовое сообщение, когда второй сокет пытается отправить сообщение!'
      enc IV b'\x82`Pv\xc3\xac\xac\x95\xd75\xd8\xd0XL\x10#'
      enc СОЛЬ b'\xe5?y\xae\x1c\xbeMIs\x92\xe3\x0e1\x07B\xf1'
      enc Shared b'\xc70}6Y\xac\xdc\xa4\x87\xba\x85\xc2\x0c\xd8\x88\x85_e#\x83f\xa1\xb0(\xac\x94s$t\xfd\x0benn\xa6 \xbfz\x1a\x9byT\t\xa8\xffk\xd9\xcb\xb5'
      enc Производный b'p\xef\xb2\xeb\xb9N\x0eQ\xa8q(\x04V\x91I\x841\xec\xdd\x04m\xd2\xef?\x02\x98f@B\x80\xd0\x16'
      enc Padded b'bob > Это тестовое сообщение, когда второй сокет пытается отправить сообщение!\x02\x02'
       

      Client1 получает те же IV и SALT от сервера.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *