in an Ubuntu VM write this code This assignment has you writing an encrypting /decrypting utility for Linux. This utility will take any ASCII fileand encrypt it in such a way that its contents are not readable –until they are decrypted by the utility.
•Practice creating a software project in Linux in the requireddevelopment directory structure
•Practice creating a makefile for a Linux software project
•Reinforce C Programming techniques – File I/O using ASCII files,Command-Line Processing
1. The utility needs to be called cryptoMagic and needs to bewritten in C
a. The utility has 2 command-line switches – they are –encrypt and–decrypt
b. If none of these switches is specified, then –encrypt isassumed
c. The utility also takes the name of an ASCII input file toencrypt/decrypt as an argument
d. For example: cryptoMagic –encrypt myFile.txt
will encrypt the contents of the myFile.txt file
will encrypt the contents of the myFile.txt file
cryptoMagic –decrypt myFile.crp
will decrypt the contents of the myFile.crp file
2. When the utility is asked to –encrypt an ASCII file, it willtake the input filename and produce the encrypted file with thesame base filename and an .crp file extension
a. For example: cryptoMagic –encrypt myFile.txt
will produce an encrypted file called myFile.crp
3. When the utility is asked to –decrypt an encrypted file, it willtake the input filename and produce the decrypted file with thesame base filename and an .txt File extension
a. For example: cryptoMagic –decrypt myFile.crp
will produce a decrypted file called myFile.txt
4. It should be noted that the input file can have any fileextension. When asked to encrypt, you need to replace the existingfile extension (if any) with .TXT. Similarly when asked to decrypt,you need to replace the existing file extension (if any) with.CRP
5. Each line (up to and including the carriage return (noted as below)) in the unencrypted ASCII file is guaranteed ofbeing less than 120 characters. While processing the input ASCIIfile you need to process one line at a time. Continue to processthe input file until you reach the end of the file.
a. Please note that it is not guaranteed that each line actuallyends in a carriage return … how will you handle that?
6. The encryption scheme is applied to each character in theline:
a. If the character is a (ASCII value 9) then simplytransform it into the output character sequence TT
b. The carriage return characters are not to be encrypted– they areleft as is in the resultant output file (the in theexample below is meant for illustration only – do not output“”)
c. If is not a tab or a carriage return character, then apply theencryption scheme in steps d through f below
d. Take the ASCII code for the input character and subtract a valueof 16 from it. Let’s call this resultant value “outChar”
e. If the resulting outChar value is less than 32, then anotherstep must be taken:
outChar = (outChar – 32)+ 144
f. You need to write the ASCII value of the new encrypted character(i.e. outChar) to the destination file as a 2 digit hexadecimalvalue. Note that this will effectively double the length of theinput line in terms of size …
For example – if the input (unencrypted) file is:
Hello There how are you?
My name is Sean Clarke. I like software!
Then the encrypted file is:
7. Each line (up to an including the carriage return (if itexists)) in the encrypted ASCII file is guaranteed of being lessthan 255 characters. Remember – while processing the input ASCIIfile you need to process one line at a time.
8. The decryption scheme is applied to each pair of characters inthe input line:
a. You need to see if the pair of characters you are processing isthe sequence
TT – if so, then simply transform this pair of characters into a character (ASCII value 9) in the output file.
b. If the pair of characters is not the sequence TT, then translatethe first character of the pair by multiplying its face value by16. Remember that hex values of A through F take on the face valuesof 10 through 15. Then add the face value of the second characterin the pair. Let’s call the resulting value “outChar”. Forexample:
i. Reading the pair of characters “38” from the encrypted file willtranslate into an outChar value of 56 decimal.
ii. Reading the pair of characters “5C” from the encrypted filewill translate into an outChar value of 92 decimal.
c.Now you need to add 16 to outChar.
d. If the resulting outChar value is greater than 127, then anotherstep must be taken: outChar = (outChar – 144) + 32
e. The outChar value now contains the decrypted ASCII code for thecharacter that you have just decoded. So take this decryptedcharacter value (i.e. outChar) and write it to the destination fileas a character.
f. The carriage return characters are not to be decrypted – theyare left as is in the resultant file.
For example – if the input (encrypted) file is:
Then the decrypted file is: This encryption scheme is pretty weird. Isn’t it?!?
9.It is expected that your cryptoMagic utility has been tested(perhaps by using the above examples) as well as with any otherencrypted / decrypted examples you can think of. Don’t forget aboutthe extreme / boundary test cases!
10. It is expected that your cryptoMagic utility has been designedusing modular techniques (i.e. the program has been written usingfunctions that you’ve created).
a. The solution must have at least 2 source files and 1 includefile
b. There should be no debugging messages present in your finalsubmitted utility
11. Your solution structure must include a makefile and also followthe recommended Linux development directory structure as outlinedin the Linux-Development-Project-Code-Structure document . . .