Code Monkey home page Code Monkey logo

caesar_cipher's Introduction

Caesar_cipher

Шифр Цезаря - это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее. Величину сдвига можно рассматривать как ключ шифрования.

Это один из самых простых и наиболее широко известных методов шифрования. При этом шифр считается крайне неэффективным.

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

  • Взломщик знает (или предполагает), что использовался простой шифр подстановки, но не знает, что это - схема Цезаря.
  • Взломщик знает, что использовался шифр Цезаря, но не знает значение сдвига.

В первом случае шифр может быть взломан, используя те же самые методы что и для простого шифра подстановки, такие как частотный анализ и т. д. Используя эти методы, взломщик, вероятно, быстро заметит регулярность в решении и поймёт, что используемый шифр - это шифр Цезаря.

Распределение букв в типичном образце текста на английском языке имеет характерный и предсказуемый вид. Шифр Цезаря «поворачивает» это распределение, и возможно определить сдвиг, проверяя график частотностей для каждого из возможных сдвигов.

Реализация на языке Python

Ниже представлен небольшой скрипт с подробными комментариями.

Реализация скрипта на языке Python
def encrypt(text, shift):
    result = ""
    for char in text:
        if char.isalpha():
            ascii_offset = ord('a') if char.islower() else ord('A')
            encrypted_char = chr((ord(char) - ascii_offset + shift) % 26 + ascii_offset)
            result += encrypted_char
        else:
            result += char
    return result

text = input("Введите текст на английском. Текст не должен содержать цифры и знаки препинания: ")

# Проверяем, что введенный текст содержит только английские символы и пробелы
while not all(char.isalpha() or char.isspace() for char in text):
    text = input("Введен некорректный текст. Введите текст на английском: ")

shift = input("Введите смещение (целое число): ")

# Проверяем, что введенное смещение - целое число
while not shift.isdigit():
    shift = input("Введен некорректный сдвиг. Введите целое число: ")

shift = int(shift)

encrypted_text = encrypt(text, shift)
print(f"Зашифрованный текст: {encrypted_text}")

Реализация на языке Ruby

Ниже представлен небольшой скрипт с подробными комментариями.

Реализация скрипта на языке Ruby
# Текст и количество символов, на которое сдвигаем
def encrypt(text, shift)
  result = ""
  text.each_char do |char|
    if char.match?(/[[:alpha:]]/)
      ascii_offset = char.downcase == char ? 'a'.ord : 'A'.ord
      encrypted_char = ((char.ord - ascii_offset + shift) % 26 + ascii_offset).chr
      result += encrypted_char
    else
      result += char
    end
  end
  result
end

puts "Введите текст на английском. Текст не должен содержать цифры и знаки препинания:"
text = gets.chomp

# Буквы и пробелы с помощью регулярного выражения!
until text.match?(/\A[[:alpha:] ]+\z/)
  puts "Введен некорректный текст. Введите текст на английском:"
  text = gets.chomp
end

puts "Введите смещение (целое число):"
shift = gets.chomp

until shift.match?(/\A\d+\z/)
  puts "Введен некорректный сдвиг. Введите целое число:"
  shift = gets.chomp
end

shift = shift.to_i

encrypted_text = encrypt(text, shift)
puts "Зашифрованный текст: #{encrypted_text}"

caesar_cipher's People

Contributors

talkodenis avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.