Цсп расшифровка: ЦСП | это… Что такое ЦСП?

ЦСП | это… Что такое ЦСП?

ТолкованиеПеревод

ЦСП

ЦСП

центр специальной подготовки

ЦСП

Центр социального партнёрства

общественная организация

http://csp.yaroslavl.ru/​

г. Ярославль, организация

ЦСП

Центр стратегического планирования

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

ЦСП

Центр содействия правосудию

ЦСП при фонде ИНДЕМ

Москва, юр.

Источник: http://dp.ru/main.php?page=48&id_article=105988

ЦСП

центральный сборный пункт

ЦСП

центр социальной помощи

ЦСП

цифровая система передач

ЦСП

Центральный стадион профсоюзов

г. Воронеж, организация

ЦСП

Центральный совет профсоюзов

Афганистан, организация

ЦСП

Центр содействия предпринимательству

ЦСП

цементно-стружечная плита

ЦСП

централизованная система планирования

Словарь: С. Фадеев. Словарь сокращений современного русского языка. — С.-Пб.: Политехника, 1997. — 527 с.

ЦСП

центр социальной поддержки

организация

ЦСП

Центр строительного проектирования

название компаний

организация, строительство

Источник: http://c-s-proekt.ru/

ЦСП

Центр спортивной подготовки сборных команд России

организация, РФ, спорт

Источник:

http://www.consultant.ru/online/base/?req=doc;base=EXP;n=483490

ЦСП

центральный совет партии

Источник: http://www. rosbalt.ru/2008/04/25/478543.html

ЦСП

центр системного проектирования

Источник: http://www.gazetakoroleva.ru/index.php?arhivyear=2007&month=&number=2005131&st=66

Пример использования

ЦСП ЦНИИмаша

ЦСП

центр социальных программ

Источник: http://www.rusal.ru/about/social/charity/csp/

Пример использования

фонд «ЦСП» РУСАЛа

ЦСП

Центр спортивной подготовки сборных команд

спорт

Источник: http://www.rian.ru/sport/20050811/41139615.html

ЦСП

цифровой сигнальный процессор

Источник: http://www.

selsoft.ru/page/sprav_sokr.htm

Словарь сокращений и аббревиатур. Академик. 2015.

Нужно сделать НИР?

  • ШОУ
  • ОО БГО

Полезное


Кабель ЦСП 6 кВ — Цена, Расшифровка, Характеристики и все Сечения

Кабель ЦСП 6 кВ — Цена, Расшифровка, Характеристики и все Сечения

— 6 кВ

Где купить

Номинальное переменное напряжение
6 кВ
Количество жил3
Сечение размер10 — 240 мм2

Содержание:

  • Расшифровка
  • Технические
    характеристики
  • Конструкция
  • Применение
  • Маркировка
  • Сечения
    и маркоразмеры
  • ГОСТ
  • Аналоги
  • Производители

Расшифровка ЦСП

Ц

— изоляция, пропитанная нестекающим составом с церезином;

*

— отсутствие буквы А означает, что токопроводящая жила — медная

С

— свинцовая оболочка;

П

— броня из проволки

ЦСП — тропическое исполнение (стойкость к воздействию плесневых грибов)

ЦСПУ — в настоящее время, буква «у» не используется.

Была введена изменением № 3 в ГОСТ 18410-73, для обозначения ТПЖ с повышенной температурой нагрева. После перехода предприятий к выпуску усовершенствованных кабелей, буква «у» была исключена.

ож — однопроволочная жила

ок — однопроволочная круглая жила

ос — однопроволочная секторная жила

мж,мп,мн — многопроволочная жила

мк — многопроволочная круглая жила

мс — многопроволочная секторная жила

Технические характеристики ЦСП

Общие характеристики

Номинальное переменное напряжение

6 кВ

Номинальная частота

50 Гц

Минимально допустимый радиус изгиба при прокладке

15 диаметров кабеля (для одножильного кабеля)
15 диаметров кабеля (для многожильного кабеля)

Строительная длина

метров

Код ОКП ЦСП

3531333900

Класс пожарной безопасности

O1.8.2.5.4

Срок службы

30 лет

Гарантийный срок эксплуатации кабеля

4,5 лет

Температура окружающей среды при эксплуатации кабеля

от -50°С до 50°С

Стойкость к воздействию повышенной относительной влажности при температуре окружающей среды до 35°C

98%

Минимальная температура прокладки кабеля без предварительного подогрева

0 °С

Радиус изгиба

Допустимые температуры нагрева токопроводящих жил кабеля:

Длительно-допустимая

80/65* °С

В режиме перегрузки

105/90* °С

Предельная при коротком замыкании

200 °С

Конструкция ЦСП

  1. 1. Медная токопроводящая жила
  2. 2. Фазная бумажная изоляция, пропитанная вязким или нестекающим изоляционным пропиточным составом, содержит церезин,- (продукт переработки нефти и сланцевого масла) который обеспечивает нестекание пропиточного состава
  3. 3. Заполнение из бумажных жгутов
  4. 4. Поясная бумажная изоляция, пропитанная вязким или нестекающим изоляционным пропиточным составом, содержит церезин,- (продукт переработки нефти и сланцевого масла) который обеспечивает нестекание пропиточного состава
  5. 5. Экран из электропроводящей бумаги
  6. 6. Свинцовая оболочка
  7. 7. Подушка:
    • битумный состав или битум;
    • крепированная бумага или кабельная пропитанная;
    • битумный состав или битум;
    • пропитанная кабельная пряжа или стеклянная пряжа из штапелированного волокна;
    • битумный состав или битум.
  8. 8. Броня из стальных оцинкованных проволок
  9. 9. Наружный покров:
    • битумный состав или битум, или вязкий подклеивающий состав;
    • пропитанная кабельная пряжа или стеклянная пряжа из штапелированного волокна;
    • битумный состав или битум, или вязкий подклеивающий состав;
    • покрытие, предохраняющее витки кабеля от слипания.

Токопроводящие жилы должны быть одно- или многопроволочными номинальными сечениями в соответствии с таблицей:

Наименование жилыНоминальное сечение медной жилы, мм
круглойсекторной (сегментной)
Однопроволочная16-5025-50
Многопроволочная25-5025-400

Номинальное сечение нулевых жил меньшего сечения должно соответствовать указанному:

Наименование жилыНоминальное сечение медной жилы, мм
Основная2535507095120150185240
Нулевая или заземления1616253550707095120

Маркировка ЦСП

Маркировка расцветкой должна быть устойчивой, нестираемой и различимой. Маркировка должна производиться при помощи цветных лент на жилах или лент натурального цвета с полосками, отличающимися друг от друга по цвету. Маркировка цифрами производится печатанием или тиснением и должна быть отчетливой. Цвет цифр при маркировке печатанием должен отличаться от цвета изоляции жилы. Цифры должны иметь одинаковый цвет. Изоляция жилы меньшего сечения (нулевой) может быть любого цвета и может не иметь цифрового обозначения. Цвет изоляции жил должен соответствовать ГОСТ 18410-73. При обозначении изолированных жил цифрами расстояние между ними не должно быть более 35 мм.

Применение ЦСП

  • Кабели предназначены для передачи и распределения электрической энергии в стационарных установках в электрических сетях на номинальное напряжение 6 кВ номинальной частотой 50 Гц
  • Для прокладки без ограничения разности уровней по трассе прокладки, в том числе на вертикальных участках
  • Для прокладки в воде
  • Для одиночной прокладки в кабельных сооружениях и производственных помещениях. Групповая прокладка разрешается только в наружных электроустановках и производственных помещениях, где возможно лишь периодическое присутствие обслуживающего персонала, при этом необходимо применять пассивную огнезащиту
  • Применяются для прокладки в условиях, если кабель подвергается значительным растягивающим условиям при эксплуатации

Сечения и маркоразмеры ЦСП

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

  • вес и диаметр
  • токовая нагрузка
  • ток короткого замыкания
  • мощность
  • сопротивление
  • точная конструкция
  • маркировка
  • ЦСП 3х10
  • ЦСП 3х16
  • ЦСП 3х25
  • ЦСП 3х35
  • ЦСП 3х50
  • ЦСП 3х70
  • ЦСП 3х95
  • ЦСП 3х120
  • ЦСП 3х150
  • ЦСП 3х185
  • ЦСП 3х240

ГОСТ ЦСП

Ниже представлены государственные стандарты для ЦСП, в соответствии с которыми мы собрали технические характеристики, представленные на данной странице.

ГОСТ 18410-73

действующий

«ГОСТ 18410-73 Кабели силовые с пропитанной бумажной изоляцией. Технические условия»

с 01.01.1975 по н.в.

скачать

Так же смотрите

ГОСТ 22483-2012

действующий

«Жилы токопроводящие для кабелей, проводов и шнуров»

с 01.01.2014 по н.в.

скачать

ГОСТ 24641-81

действующий

«Оболочки кабельные свинцовые и алюминиевые. Технические условия. »

с 01.01.1975 по н.в.

скачать

ГОСТ 7006-72

действующий

«Покровы защитные кабелей»

с 01.01.1975 по н.в.

скачать

ГОСТ 15150-69

действующий

«Исполнения для различных климатических районов»

с 01. 01.1971 по н.в.

скачать

Аналоги ЦСП

СП

бронированный проволкой кабель, с медной жилой, с бумажной пропитанной изоляцией, свинцовой оболочкой, наружный покров из битума и пряжи. Напряжение 6 кВ.

СПл

бронированный проволкой кабель, с медной жилой, с бумажной пропитанной изоляцией, свинцовой оболочкой, наружный покров из битума и пряжи. Напряжение 6 кВ.

ЦСПл

бронированный проволкой кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, наружный покров из битума и пряжи. Напряжение 6 кВ.

СП2л

бронированный проволкой кабель, с медной жилой, с бумажной пропитанной изоляцией, свинцовой оболочкой, наружный покров из битума и пряжи. Напряжение 6 кВ.

СКл

бронированный круглой проволкой кабель, с медной жилой, с бумажной пропитанной изоляцией, свинцовой оболочкой, наружный покров из битума и пряжи. Напряжение 6 кВ.

ЦСКл

бронированный круглой проволкой кабель, с медной жилой, с бумажной пропитанной изоляцией (нестекающий состав), свинцовой оболочкой, наружный покров из битума и пряжи. Напряжение 6 кВ.

Заводы-производители ЦСП

ООО «Камский Кабель»

ООО «Сарансккабель»

ООО «ТД ЛипарКабель»

НАО «Иркутсккабель»

Ваша заявка на кабель ЦСП — 6кВ успешно отправлена. С вами свяжутся в ближайшее время!

Представьтесь, пожалуйста:

E-Mail:

Телефон:

Необходимое количество:

Сообщение (при необходимости):

Авторизация Регистрация Забыли пароль?

CSP и процесс шифрования — приложения Win32

Редактировать

Твиттер LinkedIn Фейсбук Эл. адрес

  • Статья
  • 2 минуты на чтение

Функции CryptoAPI используют поставщиков криптографических услуг (CSP) для выполнения шифрования и дешифрования, а также для хранения ключей и обеспечения безопасности. Эти CSP являются независимыми модулями. В идеале CSP должны быть независимыми от конкретного приложения, чтобы любое приложение могло работать с различными CSP. Однако в действительности некоторые приложения предъявляют особые требования, требующие индивидуального CSP. Это по сравнению с Windows Модель GDI . CSP аналогичны драйверам графических устройств.

Качество защиты ключей в системе является конструктивным параметром CSP, а не системы в целом. Это позволяет приложению работать в различных контекстах безопасности без изменений.

Доступ приложений к внутренним криптографическим компонентам строго ограничен. Это облегчает разработку безопасных и переносимых приложений.

Применяются следующие три правила проектирования:

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

Как минимум CSP состоит из библиотеки динамической компоновки (DLL) и файла подписи . Файл подписи необходим для обеспечения того, чтобы CryptoAPI распознает CSP. CryptoAPI периодически проверяет эту подпись, чтобы гарантировать обнаружение любого вмешательства в CSP.

Некоторые CSP могут реализовать часть своих функций в службе с разделением адресов, вызываемой через локальный RPC, или в оборудовании, вызываемом через драйвер системного устройства. Изоляция глобальных операций с состоянием ключей и центральных криптографических операций в службе с разделением адресов или в оборудовании защищает ключи и операции от подделки в пространстве данных приложения.

Для приложений неразумно использовать атрибуты, характерные для конкретного CSP. Например, Microsoft Base Cryptographic Provider (поставляется с CryptoAPI) поддерживает 40-битные сеансовые ключи и 512-битные открытые ключи. Приложения, манипулирующие этими ключами, должны избегать предположений об объеме памяти, необходимом для хранения этих ключей, поскольку при использовании другого CSP приложение может выйти из строя. Хорошо написанные приложения должны работать с различными CSP.

Дополнительные сведения о типах провайдеров криптографии и предопределенных CSP, которые можно использовать с CryptoAPI, см. в разделе Типы провайдеров криптографии и поставщики служб криптографии Майкрософт.

Лабораторная работа 4-2: Шифр ​​Цезаря — Шифрование и дешифрование — CSP Python

Примечание. Часть этой лабораторной работы взята из замечательной книги Эла Свейгарта « Взлом секретных шифров с помощью Python: руководство для начинающих по криптографии и компьютерному программированию с помощью Python », доступна онлайн здесь, в Invent With Python, среди других его работ. Не стесняйтесь проверить их, если они вас интересуют!

Шифр ​​Цезаря

Шифр ​​Цезаря, названный в честь Юлия Цезаря из Древнего Рима, представляет собой тип шифра замены, в котором каждая буква исходного (незашифрованного) сообщения заменяется другой буквой.

Шифрование с помощью шифра Цезаря

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

В шифре Цезаря ключом является число от 0 до 25, потому что в алфавите 26 букв. Это означает, что для любого данного сообщения существует 26 различных способов, которыми мы можем зашифровать сообщение.

Для каждой буквы ключ определяет , какая буква заменяет текущую букву, путем обратного отсчета алфавита . В следующем примере, допустим, мы хотим зашифровать букву B с помощью ключа 3 , мы найдем 3-ю букву, которая появляется после B , то есть C, D, затем, наконец, E .

В шифре Цезаря с ключом 3 A становится D, B становится E, C становится F и так далее…

Это легко показать, выстроив два алфавита, по одному на каждом другой, со вторым алфавитом, начинающимся с буквы, сдвинутой на 3 буквы вниз. Это означает, что нижний ряд должен быть сдвинут на осталось .

 ABCDEFGHIJKLMNOPQRSTUVWXYZ
DEFGHIJKLMNOPQRSTUVWXYZABC
 

Вы могли заметить, что вторая строка начинается с букв ABC сразу после Z . Это потому, что когда вы перемещаетесь вниз по алфавиту, если вы дойдете до конца (Z), он вернется к началу (A).

Этот тип изображения делает более ясным, какая буква должна стать какой. Если бы мы хотели зашифровать слово БИЛЛИ , мы бы просто взяли каждую уникальная буква открытого текста (верхняя строка) и найти соответствующую ей букву зашифрованного текста (нижняя строка), или:

 A [B] CDEFGH [I] JK [L] MNOPQRSTUVWX [Y] Z
D [E] FGHIJK [L] MN [O] PQRSTUVWXYZA [B] C
 

Итак, мы ясно видим, что:

  • B становится E
  • I становится L
  • L становится O
  • Y становится B

(Обратите внимание, что нам нужно найти только уникальные буквы, например L , потому что каждый L всегда будет превращаться в одну и ту же букву)

Таким образом, окончательный зашифрованный текст будет ELOOB . Обратите внимание, что когда мы доходим до конца алфавита, мы продолжаем считать, начиная с A, B и т. д.

Расшифровка с помощью шифра Цезаря

Расшифровка работает очень похожим образом, за исключением того, что на этот раз вместо обратного отсчета алфавит, ты считаешь «вверх»! В качестве примера попробуем расшифровать ELOOB с использованием ключа 3 , потому что мы знаем, что результатом должен быть наш исходный открытый текст, BILLY . Начнем с выравнивания наших алфавитов:

 ABCDEFGHIJKLMNOPQRSTUVWXYZ.
XYZABCDEFGHIJKLMNOPQRSTUVW
 

Обратите внимание, что на этот раз вместо того, чтобы сместить нижний ряд влево, мы смещаем его вправо . Затем мы можем найти наши буквы зашифрованного текста (верхний ряд) E, L, O, B и найти соответствующие им буквы открытого текста (нижний ряд).

 A [B] CD [E] FGHIJK [L] MN [O] PQRSTUVWXYZ
X [Y] ZA [B] CDEFGH [I] JK [L] MNOPQRSTUVW
 

Теперь мы можем видеть, что:

  • E становится B
  • L становится I
  • O становится L
  • B становится Y

Что дает нам исходный открытый текст БИЛЛИ .

Далее мы собираемся узнать о реализации шифра Цезаря на Python.

Пошаговое руководство по шифрованию

Для начала создайте файл с именем FILN_caesar.py , где FILN — ваши имя и фамилия, без пробела.

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

В этой лабораторной работе вы должны следовать и шаг за шагом создавать это в предпочитаемой вами среде IDE Python. Измененные строки в коде будут выделены.

Давайте начнем с нашей функции шифрования. В этой функции мы будем принимать ключ и сообщение в качестве аргументов. Первое, что я собираюсь сделать, это преобразовать все сообщение в верхний регистр, что мы можем сделать с помощью строкового метода . upper() . Затем я собираюсь создать переменную с именем alpha , который будет содержать алфавит в виде длинной строки

 def encrypt(key, message):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 

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

 1
2
3
4
5
6 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
 

Следует отметить, что шифр Цезаря не обрабатывает символы, не являющиеся буквами, такие как знаки препинания или пробелы. Итак, мы хотим убедиться, что если мы собираемся что-то зашифровать, мы будем шифровать только буквы.

Давайте добавим условие, чтобы справиться с этим. Логика здесь такова: «если это письмо, зашифруйте его. в противном случае просто добавьте его к результату (т.е. не изменяйте его)». Мы можем проверить, находится ли буква var в строке str , используя var in str , которая возвращает True , если var найдена в str .

 1
 2
 3
 4
 5
 6
 7
 8
 9
10 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # зашифровать это
        еще:
            результат = результат + буква
 

Теперь мы приступим к шифрованию. Это происходит побуквенно, так как мы используем цикл for для повторения сообщения, что делает его проще для нас. Первое, что мы хотим сделать, это выяснить где буква в алфавите? В каком индексе буква? Для этого мы можем использовать строковый метод .find() , который даст нам первое вхождение буквы.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            #найди букву в алфавите
            letter_index = alpha.find(буква)
        еще:
            результат = результат + буква
 

Теперь, когда мы знаем буквенный индекс открытого текста… мы должны найти соответствующую букву зашифрованного текста! Хотя технически мы могли бы создать новую строку алфавита, которая была сдвинута, было бы намного проще вычислить новый буквенный индекс, используя ключ . Мы можем «сдвинуть» алфавит влево, добавив значение ключа к индексу. В нашем старом примере, где мы превратили B в E с ключом 3 , вы можете видеть здесь, что индекс B — это 1 , а индекс E — это 4 , так что действительно, +3 — это операция. В общем, это просто + ключ .

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = alpha.find(буква) + ключ
        еще:
            результат = результат + буква
 

Теперь, когда у нас есть индекс буквы зашифрованного текста, нам просто нужно добавить эту букву к результату. Прямо сейчас letter_index представляет позицию буквы в алфавите. Мы хотим получить само письмо. Мы делаем это, просто используя letter_index в качестве индекса строки alpha[letter_index] . Затем мы добавляем это к результату.

 1
 2
 3
 4
 5
 6
 7
 8
 910
11
12
13 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = alpha.find(буква) + ключ

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква
 

Однако мы забыли одну вещь. Мы забыли обработать циклы! Как мы справимся с тем, что произойдет, когда мы дойдем до конца алфавита? Ну, всякий раз, когда мы достигаем индекса 26, мы хотим, чтобы этот индекс стал равным нулю (тем более, что альфа не имеет 26-го индекса!). Если наш индекс становится равным 28, мы хотим, чтобы наш индекс на самом деле был равен 2. Последовательность здесь заключается в том, что , если наш индекс равен 26 или больше, мы хотим вычесть 26. Хотя мы могли бы использовать для этого оператор if, существует лучший способ.

Это яркий пример того, где модуль по модулю может быть полезен. Мы можем использовать модуль для обработки циклов. Это работает, потому что любое число больше 26 будет уменьшено до числа от 0 до 25, так как остаток от деления на 26 может быть только от 0 до 25.

Мы можем убедиться, что это работает для обхода петли, наблюдая за следующим поведением:

  • \(25 \% 26 = (0*26 + 25) \% 26 = 25\)
  • \(26 \% 26 = (1*26 + 0) \% 26 = 0\)
  • \(27 \% 26 = (1*26 + 1) \% 26 = 1\)
  • \(28 \% 26 = (1*26 + 2) \% 26 = 2\)
  • и так далее…

Затем мы можем просто использовать следующую строку для обработки цикла:

 letter_index = (alpha. find(letter) + key) % 26
 

Однако при программировании рекомендуется избегать жесткого кодирования чисел, если это возможно. Мы работаем с числом 26, потому что в алфавите 26 букв, а также потому, что альфа имеет длину 26 ( len(alpha) == 26 ). Вместо 26 в нашем алгоритме мы должны использовать len(alpha) .

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha.find(letter) + key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква
 

Наконец, то, что мы написали, будет повторяться для каждого символа в сообщении. Вернем нашу последнюю строку.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha.find(letter) + key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква

    вернуть результат
 

Пошаговое руководство по расшифровке

Опять же, это очень похоже на нашу функцию шифрования, поэтому давайте перепишем нашу функцию шифрования и назовем ее «расшифровать».

Когда вы переписываете функцию, помните, что мы меняем:

  • Вместо + клавиша мы хотим сдвинуться в другую сторону, используя вместо - клавишу .

Тогда наша окончательная программа:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 
 def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha.find(letter) + key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква

    вернуть результат

def расшифровать (ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha. find(letter) - key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква

    вернуть результат
 

Тестирование нашей программы

Наконец, мы можем протестировать нашу программу. Давайте напишем скрипт для проверки нашего кода. Следующий код должен быть добавлен к и вашей программы выше.

 по умолчанию main():
    слово = "БИЛЛИ"

    # зашифровать "БИЛЛИ" ключом 3
    зашифровано = зашифровано (3, слово)
    print(encrypted) #должен печатать "ELOOB"

    # расшифровать "ELOOB" с ключом 3
    расшифровано = расшифровано (3, зашифровано)
    print(decrypted) #должен печатать "БИЛЛИ"

если __name__ == "__main__":
    главный()
 

Запустите программу и сравните ее вывод с тем, что должно быть (она должна напечатать ELOOB , затем снова BILLY ). Если получится, то отлично! Мы должны проверить это еще раз, но на этот раз с фразой/словом с небуквенными символами:

 def main():
    слово = "ПРИВЕТ, МИР?!"

    #encrypt "ПРИВЕТ, МИР?!" с ключом на 20
    зашифровано = зашифровано (20, слово)
    print(encrypted) #должен печатать "BYFFI QILFX?!"

    #decrypt "BYFFI QILFX?!" с ключом на 20
    расшифровано = расшифровано (20, зашифровано)
    print(decrypted) #должен печатать "HELLO WORLD?!"

если __name__ == "__main__":
    главный
 

Когда мы запускаем эту программу, мы должны заметить, что когда она печатает форму зашифрованного текста, пробел, знак вопроса и восклицательный знак остаются на одном месте. Хороший знак!

Рефакторинг нашего кода

Согласно Википедии, рефакторинг кода — это процесс реструктуризации существующего компьютерного кода без изменения его внешнего поведения. Это очень важный процесс для изучения, потому что он облегчает поддержку нашего кода, как вы скоро увидите.

На данный момент в нашем коде есть два основных недостатка:
  1. Наш код часто повторяется.
  2. Наш алгоритм можно разбить на более специализированные функции

Глядя на наше окончательное решение, мы можем заметить, что циклы for в encrypt() и decrypt() почти идентичны, за исключением того, что один добавляет ключ, а другой вычитает ключ (#1). Мы также замечаем, что наш процесс шифрования/дешифрования целого слова может быть далее разбит на шифрование/дешифрование отдельных букв (как мы делаем в нашем для петли ) (#2). Эти два недостатка можно исправить, просто создав новую функцию.

Давайте создадим новую функцию get_cipherletter() .

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 
 def get_cipherletter (новый_ключ, буква):


def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha.find(letter) + key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат +

    вернуть результат

def расшифровать (ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha. find(letter) - key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква

    вернуть результат
 

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
3940 
 def get_cipherletter (новый_ключ, буква):
    #все еще нужна альфа для поиска букв
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    если буква в альфе:
        вернуть альфа[новый_ключ]
    еще:
        ответное письмо

def encrypt(ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha. find(letter) + key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква

    вернуть результат

def расшифровать (ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        если буква в альфе: #если буква на самом деле буква
            # найти соответствующую букву зашифрованного текста в алфавите
            letter_index = (alpha.find(letter) - key) % len(alpha)

            результат = результат + альфа[буквенный_индекс]
        еще:
            результат = результат + буква

    вернуть результат
 

Затем мы удаляем биты кода из наших функций encrypt и decrypt , которые теперь являются избыточными, и заменяем их кодом, который использует эту функцию:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 
 по определению get_cipherletter (новый_ключ, буква):
    #все еще нужна альфа для поиска букв
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    если буква в альфе:
        вернуть альфа[новый_ключ]
    еще:
        ответное письмо

def encrypt(ключ, сообщение):
    сообщение = сообщение. upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        new_key = (alpha.find(буква) + ключ) % len(альфа)
        результат = результат + get_cipherletter (новый_ключ, буква)

    вернуть результат

def расшифровать (ключ, сообщение):
    сообщение = сообщение.upper()
    альфа = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    результат = ""

    для письма в сообщении:
        new_key = (alpha.find(letter) - key) % len(alpha)
        результат = результат + get_cipherletter (новый_ключ, буква)

    вернуть результат
 

«Но подождите!» — вы могли бы сказать — «А что, если у нас есть символ? Он не будет найден в alpha , когда мы используем alpha.find()

И вы правы! И это нормально. Функция .find() возвращает -1 , что по-прежнему является допустимым числом, и проверка того, существует ли буква в alpha или нет, все равно будет происходить внутри функции.

LEAVE A REPLY

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