\[ \begin{align}\begin{aligned}\newcommand\blank{~\underline{\hspace{1.2cm}}~}\\% Bold symbols (vectors) \newcommand\bs[1]{\mathbf{#1}}\\% Poor man's siunitx \newcommand\unit[1]{\mathrm{#1}} \newcommand\num[1]{#1} \newcommand\qty[2]{#1~\unit{#2}}\\\newcommand\per{/} \newcommand\squared{{}^2} \newcommand\cubed{{}^3} % % Scale \newcommand\milli{\unit{m}} \newcommand\centi{\unit{c}} \newcommand\kilo{\unit{k}} \newcommand\mega{\unit{M}} % % Percent \newcommand\percent{\unit{\%}} % % Angle \newcommand\radian{\unit{rad}} \newcommand\degree{\unit{{}^\circ}} % % Time \newcommand\second{\unit{s}} \newcommand\s{\second} \newcommand\minute{\unit{min}} \newcommand\hour{\unit{h}} % % Distance \newcommand\meter{\unit{m}} \newcommand\m{\meter} \newcommand\inch{\unit{in}} \newcommand\foot{\unit{ft}} % % Force \newcommand\newton{\unit{N}} \newcommand\kip{\unit{kip}} % kilopound in "freedom" units - edit made by Sri % % Mass \newcommand\gram{\unit{g}} \newcommand\g{\gram} \newcommand\kilogram{\unit{kg}} \newcommand\kg{\kilogram} \newcommand\grain{\unit{grain}} \newcommand\ounce{\unit{oz}} % % Temperature \newcommand\kelvin{\unit{K}} \newcommand\K{\kelvin} \newcommand\celsius{\unit{{}^\circ C}} \newcommand\C{\celsius} \newcommand\fahrenheit{\unit{{}^\circ F}} \newcommand\F{\fahrenheit} % % Area \newcommand\sqft{\unit{sq\,\foot}} % square foot % % Volume \newcommand\liter{\unit{L}} \newcommand\gallon{\unit{gal}} % % Frequency \newcommand\hertz{\unit{Hz}} \newcommand\rpm{\unit{rpm}} % % Voltage \newcommand\volt{\unit{V}} \newcommand\V{\volt} \newcommand\millivolt{\milli\volt} \newcommand\mV{\milli\volt} \newcommand\kilovolt{\kilo\volt} \newcommand\kV{\kilo\volt} % % Current \newcommand\ampere{\unit{A}} \newcommand\A{\ampere} \newcommand\milliampereA{\milli\ampere} \newcommand\mA{\milli\ampere} \newcommand\kiloampereA{\kilo\ampere} \newcommand\kA{\kilo\ampere} % % Resistance \newcommand\ohm{\Omega} \newcommand\milliohm{\milli\ohm} \newcommand\kiloohm{\kilo\ohm} % correct SI spelling \newcommand\kilohm{\kilo\ohm} % "American" spelling used in siunitx \newcommand\megaohm{\mega\ohm} % correct SI spelling \newcommand\megohm{\mega\ohm} % "American" spelling used in siunitx % % Inductance \newcommand\henry{\unit{H}} \newcommand\H{\henry} \newcommand\millihenry{\milli\henry} \newcommand\mH{\milli\henry} % % Power \newcommand\watt{\unit{W}} \newcommand\W{\watt} \newcommand\milliwatt{\milli\watt} \newcommand\mW{\milli\watt} \newcommand\kilowatt{\kilo\watt} \newcommand\kW{\kilo\watt} % % Energy \newcommand\joule{\unit{J}} \newcommand\J{\joule} % % Composite units % % Torque \newcommand\ozin{\unit{\ounce}\,\unit{in}} \newcommand\newtonmeter{\unit{\newton\,\meter}} % % Pressure \newcommand\psf{\unit{psf}} % pounds per square foot \newcommand\pcf{\unit{pcf}} % pounds per cubic foot \newcommand\pascal{\unit{Pa}} \newcommand\Pa{\pascal} \newcommand\ksi{\unit{ksi}} % kilopound per square inch \newcommand\bar{\unit{bar}} \end{aligned}\end{align} \]

Oct 24, 2024 | 658 words | 7 min read

8.3.2. Task 2#

Learning Objectives:#

  • Implement and apply classic encryption techniques such as the Atbash cipher.

  • Utilize file I/O functions in Python for reading and writing text data.

  • Develop an understanding of the concept of data encryption and its applications.

Introduction#

Encryption remains a cornerstone of secure communication, both historically and in the modern digital world. By learning to implement classical encryption techniques such as the Atbash cipher, students can grasp foundational concepts of data security. Python, with its simplicity and robustness, serves as an excellent tool for exploring these encryption methods.

What is a Cipher?#

A cipher is a method for performing encryption or decryption – a series of well-defined steps that can be followed as a procedure. An algorithm, called a cipher algorithm, is used to transform the text to make it unrecognizable (encrypt it). The same or a different algorithm may be used to return the text to its original form (decrypt it).

How the Atbash Cipher Works#

The Atbash cipher is a very specific case of a substitution cipher where the letters of the alphabet are reversed. In other words, the first letter becomes the last letter, the second letter becomes the second to last letter, and so on.

For the English alphabet, this would mean:

  • A is substituted with Z

  • B is substituted with Y

  • C is substituted with X

… and so forth up to Z being substituted with A.

For digits, it similarly reverses the order:

  • 0 is substituted with 9

  • 1 with 8

  • 2 with 7

… continuing in this pattern.

Task Instructions#

Develop a Python program that asks the user for the name of a text file, applies the Atbash cipher to generate encrypted text from the content of the named file, and then writes the encrypted text to atbash_cipher.txt. You can use secret.txt and empty.txt as a sample input files for testing your program.

Your program should include a function named atbash_cipher that takes a plaintext string as its only argument and returns an encrypted text string. The function should apply the Atbash cipher to the input text, reversing the alphabet and numeric characters according to the cipher rules provide above.

Save the flowchart of your program as a separate page in py4_ind_username.pdf. Save your Python file as py4_ind_2_username.py.

Sample Output#

Test cases for the Atbash cipher script with file handling. Use the values in Table 8.7 below to test your program.

Table 8.7 Test Cases#

Case

filename

1

secret.txt

2

empty.txt

Ensure your program’s output matches the provided samples exactly. This includes all characters, white space, and punctuation. In the samples, user input is highlighted like this for clarity, but your program should not highlight user input in this way.

Case 1 Sample Output

$ python3 py4_ind_2_username.py Enter the name of the file: secret.txt The encrypted message is: 'R zn z sziwdliprmt VMTI86699 hgfwvmg!' Encryption completed. Check the output files for results.

Listing 8.2 Case_1_atbash_cipher.txt#
1R zn z sziwdliprmt VMTI86699 hgfwvmg!

Case 2 Sample Output

$ python3 py4_ind_2_username.py Enter the name of the file: empty.txt The encrypted message is: '' Encryption completed. Check the output files for results.

Listing 8.3 Case_2_atbash_cipher.txt#
1