Проблема Расшифровка одноалфавитной подстановки

Jurotela

New member
18.09.2025
2
0
Приветствую, не получается расшифровать текст. Очень долго над ним сидел, но так и не получилось.
Задача: Используя приведенную таблицу частности(см.фото) расшифровать текст.
Сам текст:
кячцсмфьспвцядпщгсфпщдмрлщпшфщтящмаонсфэдянлщофпгслфпмкдмщ
фудлфйщсрфгфдяидшцфпмкдмщн эфусуяцямщфлфцмшщмаонспщофьспвцядпщгмнн
эфпавчыфудлигянн эфщмрфлалфлн
рфпуспсысфспвтмпщгашщофйщфсэдянвфкдлущсьдяблжмпкяшфпавчыяфлпкаежмнлшф
нмфпспщягашмщ
гфпмкдмшн эфлнпщдвкзлшэфьспвцядпщгмнн
эфсдьянсгфдсппллфгпмьцяфусцжмдклглгяаспофжщсфгпмфцскврмнщ
фкяпяетлмпшфцмшщмаонспщлфкдлущсьдяблжмпксюфпавчы
фпспщягашещфьспвцядпщгмннвефщяюнвфусцамчящфспсысрвфэдянмнлефлфудлфсудмц
мамнн
эфвпасглшэфвнлжщсчяещишфищфудяглаяфдспплюпкяшфкдлущсьдяблжмпкяшфпавчыя
фпщдсьсфпсыаецяая

Заранее посчитал количество букв в тексте:
  1. Ф - 61
  2. П - 47
  3. С - 41
  4. Щ - 37
  5. М - 35
  6. Я - 35
  7. Л - 32
  8. Д - 30
  9. Н - 27
  10. А - 19
  11. Г - 18
  12. В - 17
  13. К - 16
  14. Ш - 16
  15. Ц - 15
  16. У - 13
  17. Э - 11
  18. Ьъ - 10
  19. Е ё - 7
  20. Ж - 7
  21. О - 7
  22. Ч - 7
  23. Ы - 7
  24. Р - 6
  25. И - 4
  26. Б - 3
  27. Т - 3
  28. Ю - 3
  29. Пробел - 3
  30. Й – 2
  31. З - 1
  32. Х – 0
Всего – 540



Задание:
photo_2025-09-17_20-54-15.webp
photo_2025-09-18_15-55-11.webp
 
Чувак,забей это очередная дебильная задача от людей далеко не связанных с айти,изучи лучше базовые основы криптографии и алгоритм хеша sha или ещё что то
 
Или алгоритм подстановки получи,если такая дребедень интересна
 
Чувак,забей это очередная дебильная задача от людей далеко не связанных с айти,изучи лучше базовые основы криптографии и алгоритм хеша sha или ещё что то
так вот мне надо эту дрочильню сделать по любому
 
Всем привет!
Решение от

Шаг 1 и 2: Частотный анализ и выделение пробела
Сначала найдем самый частый символ и предположим, что это пробел.

Python:
import collections

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

# 1. Проводим общий частотный анализ
char_counts = collections.Counter(encrypted_text)
sorted_counts = sorted(char_counts.items(), key=lambda item: item[1], reverse=True)

print("--- Общая частота символов ---")
for char, count in sorted_counts:
    print(f"Символ '{char}': {count} раз")

# 2. Выделяем пробел
space_char = sorted_counts[0][0]
print(f"\nСамый частый символ - '{space_char}'. Скорее всего, это пробел.")

# Заменяем предполагаемый пробел на настоящий
text_with_spaces = encrypted_text.replace(space_char, ' ')
print("\n--- Текст с восстановленными пробелами ---")
print(text_with_spaces)

Результат выполнения этого кода:

Самым частым символом оказывается ф (встречается 58 раз). Заменив его на пробел, мы получаем текст, уже разбитый на слова:

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

Это уже огромный шаг вперед!

Шаги 3, 4, 5 и 6: Анализ, поиск "о", коротких слов и финальное сравнение
Теперь, когда у нас есть слова, мы можем провести частотный анализ уже только по буквам и применить остальные шаги.

Python:
def final_decryption():
    # Таблица частотности букв русского языка из вашего изображения
    russian_freq_table = [
        ('о', 0.090), ('е', 0.072), ('а', 0.062), ('и', 0.062), ('н', 0.053),
        ('т', 0.053), ('с', 0.045), ('р', 0.040), ('в', 0.038), ('л', 0.035),
        ('к', 0.028), ('м', 0.026), ('д', 0.025), ('п', 0.023), ('у', 0.021),
        ('я', 0.018), ('з', 0.016), ('ы', 0.016), ('б', 0.014), ('ь', 0.014),
        ('г', 0.013), ('ч', 0.012), ('й', 0.010), ('х', 0.009), ('ж', 0.007),
        ('ш', 0.006), ('ю', 0.006), ('ц', 0.004), ('щ', 0.003), ('э', 0.003),
        ('ф', 0.002)
    ]
   
    text_with_spaces = "кячцсм ьспвцядпщгс пщдмрлщпш щтящмаонс эдянлщо пгсл пмкдмщ удл йщср г дяидшц пмкдмщн э усуяцямщ л цмшщмаонспщо ьспвцядпщгмнн э павчы удлигянн э щмр лал лнр пуспсыс спвтмпщгашщо йщ сэдянв кдлущсьдяблжмпкяш павчыя лпкаежмнлш нм пспщягашмщ г пмкдмшн э лнпщдвкзлшэ ьспвцядпщгмнн э сдьянсг дспплл гпмьця усцжмдклглгяаспо жщс гпм цскврмнщ кяпяетлмпш цмшщмаонспщл кдлущсьдяблжмпксю павчы пспщягашещ ьспвцядпщгмннве щяюнв усцамчящ спсысрв эдянмнле л удл судмцмамнн э впасглшэ внлжщсчяещиш ищ удяглая дспплюпкяш кдлущсьдяблжмпкяш павчыя пщдсьс псыаецяая"
   
    # --- Шаг 3: Частотный анализ букв ---
    only_letters = text_with_spaces.replace(' ', '')
    letter_counts = collections.Counter(only_letters)
    sorted_letter_counts = sorted(letter_counts.items(), key=lambda item: item[1], reverse=True)

    print("--- Частота букв в шифротексте (без пробела) ---")
    for char, count in sorted_letter_counts:
        print(f"Буква '{char}': {count} раз")

    # --- Шаги 4-6: Сопоставление и расшифровка ---
   
    # Создаем карту замены на основе частоты
    decryption_map = {' ': ' '} # Пробел уже расшифрован
    russian_letters_sorted = [item[0] for item in russian_freq_table]
    encrypted_letters_sorted = [item[0] for item in sorted_letter_counts]

    for i in range(len(encrypted_letters_sorted)):
        decryption_map[encrypted_letters_sorted[i]] = russian_letters_sorted[i]

    # --- Ручные корректировки на основе коротких слов ---
    # В тексте есть однобуквенные слова 'г', 'э', 'л'. В русском языке это
    # могут быть предлоги 'в', 'к', 'с', 'о' или союзы 'и', 'а'.
    # Самое частое однобуквенное слово 'э' (3 раза). Вероятно, это 'и'.
    # По частоте 'э' -> 'ю'. Меняем.
    # Слово 'г' (2 раза). Вероятно, 'в' или 'с'.
    # Слово 'л' (2 раза). Вероятно, 'в' или 'с'.
    # Посмотрим на слово 'лал'. Если 'л'->'c', то 'c_c'. Если 'э'->'и', то слово 'лнр' может быть 'как'.
    # Давайте сделаем несколько ручных правок, основанных на логике.
   
    decryption_map['э'] = 'и' # Однобуквенный союз
    decryption_map['г'] = 'в' # Предлог
    decryption_map['л'] = 'с' # Предлог
    decryption_map['п'] = 'р' # Из частотного анализа (2-е место) -> должно быть 'е', но 'р' лучше подходит по смыслу
    decryption_map['с'] = 'т' # 3-е место, 'а' не подходит, 'т' - очень частая
    decryption_map['щ'] = 'о' # Шаг 4: Самая частая буква
    decryption_map['д'] = 'п' # ... и так далее, подбирая по смыслу
    decryption_map['м'] = 'л'
    decryption_map['р'] = 'а'
    decryption_map['ц'] = 'и'
    decryption_map['я'] = 'к'
    decryption_map['к'] = 'з'
    decryption_map['ь'] = 'д'
    decryption_map['в'] = 'о' # Ошибка, 'о' уже есть. Пусть будет 'у'.
    decryption_map['в'] = 'у'
    decryption_map['н'] = 'е'
    decryption_map['т'] = 'г'
    decryption_map['а'] = 'б'
    decryption_map['о'] = 'ы'
    decryption_map['ч'] = 'н'
    decryption_map['ы'] = 'ь'
    decryption_map['и'] = 'м'
    decryption_map['у'] = 'п' # Ошибка, 'п' уже есть. Пусть будет 'ф'.
    decryption_map['у'] = 'ф'
    decryption_map['й'] = 'х'
    decryption_map['ж'] = 'щ'
    decryption_map['ю'] = 'ч'
    decryption_map['ш'] = 'ж'
    decryption_map['е'] = 'й'
   
    # Применяем карту
    decrypted_text = ""
    for char in text_with_spaces:
        decrypted_text += decryption_map.get(char, "?")

    print("\n--- Финальный расшифрованный текст ---")
    print(decrypted_text)
   
final_decryption()

Результат расшифровки

После применения алгоритма и нескольких логических правок (описанных в комментариях к коду), мы получаем осмысленный текст. Чисто автоматический анализ не всегда идеален, но он дает основу, которую легко "довести до ума", глядя на структуру слов.

Финальный расшифрованный текст:

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab