Compare commits
7 Commits
third-lab
...
third-lab-
| Author | SHA1 | Date | |
|---|---|---|---|
| 9f7e34f7cd | |||
| ddabccfd2b | |||
| bfa7c918b2 | |||
| b816f9f17c | |||
| d8db6809e4 | |||
| 09b722a8eb | |||
| 66279d0ff4 |
@@ -22,6 +22,8 @@ main = do
|
||||
|
||||
let sourceTextPath = "resources/biography.txt"
|
||||
let sourceImagePath = "resources/david.bmp"
|
||||
let alphabetPath = "tmp/alphabet.txt"
|
||||
let encryptedTextPath = "tmp/biography_encrypted.txt"
|
||||
let encodedImagePath = "tmp/david_" ++ show bitsPerByte ++ "_" ++ show caesarShift ++ ".bmp"
|
||||
let decodedTextPath = "tmp/biography.txt"
|
||||
|
||||
@@ -32,8 +34,12 @@ main = do
|
||||
putStrLn "\nШифрование текста"
|
||||
let alphabet = createAlphabetFromText inputText
|
||||
putStrLn $ "Размер алфавита: " ++ show (length alphabet)
|
||||
writeFile alphabetPath alphabet
|
||||
putStrLn $ "Алфавит сохранён в файл \"" ++ alphabetPath ++ "\""
|
||||
let encryptedText = encryptCaesar alphabet caesarShift inputText
|
||||
putStrLn $ "10 символов шифра: \"" ++ take 10 encryptedText ++ "\""
|
||||
writeFile encryptedTextPath encryptedText
|
||||
putStrLn $ "Зашифрованный текст сохранён в файл \"" ++ encryptedTextPath ++ "\""
|
||||
let encryptedTextBits = textToBits encryptedText
|
||||
putStrLn $ "10 битов шифра: \"" ++ show (take 10 $ VU.toList encryptedTextBits) ++ "\""
|
||||
|
||||
@@ -52,6 +58,8 @@ main = do
|
||||
saveBmpImage encodedImagePath (ImageRGB8 resultImage)
|
||||
putStrLn $ "Изображение сохранено по пути: \"" ++ encodedImagePath ++ "\""
|
||||
|
||||
putStrLn $ "\nЧтение алфавита из файла \"" ++ alphabetPath ++ "\""
|
||||
alphabetFromFile <- readFile alphabetPath
|
||||
|
||||
putStrLn "\nДекодирование текста из изображения"
|
||||
case extractShift encodedImagePath of
|
||||
@@ -67,7 +75,7 @@ main = do
|
||||
putStrLn $ "10 битов шифра: \"" ++ show (take 10 $ VU.toList bits) ++ "\""
|
||||
let encryptedTextFromImage = takeWhile (/= '\NUL') (bitsToText bits)
|
||||
putStrLn $ "10 символов шифра: \"" ++ take 10 encryptedTextFromImage ++ "\""
|
||||
let decryptedText = decryptCaesar alphabet extractedCaesarShift encryptedTextFromImage
|
||||
let decryptedText = decryptCaesar alphabetFromFile extractedCaesarShift encryptedTextFromImage
|
||||
putStrLn $ "10 символов текста: \"" ++ take 10 decryptedText ++ "\""
|
||||
writeFile decodedTextPath decryptedText
|
||||
putStrLn $ "Текст сохранён по пути: \"" ++ decodedTextPath ++ "\""
|
||||
|
||||
BIN
lab3/report/img/david_2_20.jpg
Normal file
BIN
lab3/report/img/david_2_20.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 82 KiB |
BIN
lab3/report/img/david_3_20.jpg
Normal file
BIN
lab3/report/img/david_3_20.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
BIN
lab3/report/img/david_5_20.jpg
Normal file
BIN
lab3/report/img/david_5_20.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 84 KiB |
BIN
lab3/report/img/david_6_20.jpg
Normal file
BIN
lab3/report/img/david_6_20.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 82 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 38 KiB |
@@ -210,7 +210,7 @@
|
||||
|
||||
\subsection{Кодирование и декодирование текста с помощью шифра Цезаря}
|
||||
|
||||
Код функций для кодирования и декодирования текста с помощью шифра Цезаря представлен в листинге~\ref{lst:encrypt-caesar}. Функция \texttt{encryptCaesar} принимает алфавит в виде списка символов, смещение и сам текст, а возвращает зашифрованный текст. В её коде используется вспомогательная функция \texttt{indexOf}. Функция принимает список и элемент списка, а возвращает индекс этого элемента. Для создания алфавита используется функция \texttt{createAlphabetFromText}. Она принимает текст, а возвращает алфавит, который в нём используется, в виде списка символов. Для декодирования текста используется функция \texttt{decryptCaesar}, которая, по-сути, является лишь обёрткой над функцией \texttt{encryptCaesar}, так как процесс кодирования осуществляется почти так же как и декодирования. Функция \texttt{decryptCaesar} принимает на вход алфавит, смещение и закодированный текст, а возвращает декодированный текст.
|
||||
Код функций для кодирования и декодирования текста с помощью шифра Цезаря представлен в листинге~\ref{lst:encrypt-caesar}. Функция \texttt{encryptCaesar} принимает алфавит в виде списка символов, смещение и сам текст, а возвращает зашифрованный текст. В её коде используется вспомогательная функция \texttt{indexOf}. Функция принимает список и элемент списка, а возвращает индекс этого элемента. Для создания алфавита используется функция \texttt{createAlphabetFromText}. Она принимает текст, а возвращает алфавит, который в нём используется, в виде списка символов. Для декодирования текста используется функция \texttt{decryptCaesar}, которая, по-сути, является лишь обёрткой над функцией \texttt{encryptCaesar}, так как процесс кодирования осуществляется почти так же как и декодирования. Функция \texttt{decryptCaesar} принимает на вход алфавит, смещение и закодированный текст, а возвращает декодированный текст. Алфавит сохраняется в отдельный файл и должен передаваться вместе с зашифрованным текстом, чтобы этот текст можно было дешифровать.
|
||||
|
||||
\begin{lstlisting}[caption={Функции для кодирования и декодирования текста с помощью шифра Цезаря.}, label={lst:encrypt-caesar}]
|
||||
encryptCaesar :: [Char] -> Int -> String -> String
|
||||
@@ -239,6 +239,31 @@ decryptCaesar alphabet shift =
|
||||
alphabetLength = length alphabet
|
||||
\end{lstlisting}
|
||||
|
||||
Пример закодированного с помощью шифра Цезаря текста биографии Дэвида Дойча для смещения 5 представлен ниже.
|
||||
|
||||
\noindent
|
||||
\texttt{
|
||||
uiHF rWtFaga.ruabYgo;r3qkrNuCLS59Grcm.lrDwrvinrDJRBTrFgrirM.FYFg;rs;ngFo\\
|
||||
FgYriYrY;arAlFHa.gFYnrmerCdem. Ur9arFgrirHFgFYFlhrs.meaggm.rFlrY;aruasi.\\
|
||||
YQalYrmerIYmQForil r)iga.r8;ngFogriYrY;ar5alY.arem.r(bilYbQr5mQsbYiYFmlr\\
|
||||
N5(5TrFlrY;ar5ti.al mlr)icm.iYm.nrmerY;arAlFHa.gFYnrmerCdem. Ur9arsFmlaa\\
|
||||
.a rY;areFat rmerpbilYbQromQsbYiYFmlrcnrem.QbtiYFlhrir ago.FsYFmlrem.rir\\
|
||||
pbilYbQrSb.FlhrQio;Flayrigr,attrigrgsaoFenFlhrilrithm.FY;Qr agFhla rYmr.\\
|
||||
blrmlrirpbilYbQromQsbYa.Ur9arFgrirs.msmlalYrmerY;arQiln,m.t grFlYa.s.aYi\\
|
||||
YFmlrmerpbilYbQrQao;ilFogU1uabYgo;r,igrcm.lrYmrirxa,Fg;reiQFtnrFlr9iFeiy\\
|
||||
r-g.iatrmlrDwrvinrDJRByrY;argmlrmerCg2i.ril rSF2HiruabYgo;Ur-lr)ml mlyru\\
|
||||
iHF riYYal a rEalaHir9mbgargo;mmtrFlr5.Fo2ta,mm rN;Fgrsi.alYgrm,la ril r\\
|
||||
.ilrY;arItQir.agYib.ilYrmlr5.Fo2ta,mm rM.mi ,inTyremttm,a rcnrPFttFiQrWt\\
|
||||
tFgrko;mmtrFlr9Fh;hiYarcaem.ar.ai FlhrOiYb.itrkoFaloagriYr5ti.ar5mttahay\\
|
||||
r5iQc.F haril rYi2Flhr8i.Yr---rmerY;arviY;aQiYFoitrS.FsmgUr9ar,alYrmlrYm\\
|
||||
rPmtegmlr5mttahayrCdem. rem.r;Fgr moYm.iYarFlrY;am.aYFoitrs;ngFogyricmbY\\
|
||||
rpbilYbQreFat rY;am.nrFlrob.Ha rgsioaYFQayrgbsa.HFga rcnruallFgrkoFiQiri\\
|
||||
l r8;FtFsr5il atigU19Fgr,m.2rmlrpbilYbQrithm.FY;Qgrcahilr,FY;rirDJwRrsis\\
|
||||
a.yrtiYa.radsil a rFlrDJJzritmlhr,FY;rqFo;i. rxmfgiyrYmrs.m boarY;aruabY\\
|
||||
go;xmfgirithm.FY;QyrmlarmerY;areF.gYradiQstagrmerirpbilYbQrithm.FY;QrY;i\\
|
||||
YrFgradsmlalYFittnreigYa.rY;ilrilnrsmggFctar aYa.QFlFgYForotiggFoitrithm\\
|
||||
.FY;QU}
|
||||
|
||||
|
||||
\subsection{Представление текста в виде последовательности бит}
|
||||
|
||||
@@ -339,7 +364,7 @@ extractShift path =
|
||||
|
||||
\newpage
|
||||
\section {Результаты работы программы}
|
||||
При успешном завершении программа создаёт два файла: файл изображения с закодированных текстом и текстовый файл с декодированным текстом.
|
||||
При успешном завершении программа создаёт четыре файла: файл изображения с закодированных текстом, текстовый файл с закодированным текстом, текстовый файл с алфавитом и текстовый файл с декодированным текстом.
|
||||
|
||||
\begin{figure}[h]
|
||||
\centering
|
||||
@@ -352,32 +377,64 @@ extractShift path =
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.3\linewidth]{img/david_1_20.jpg}
|
||||
\includegraphics[width=0.33\linewidth]{img/david_1_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (1 бит).}
|
||||
\label{fig:david1}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.3\linewidth]{img/david_4_20.jpg}
|
||||
\includegraphics[width=0.33\linewidth]{img/david_2_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (2 бит).}
|
||||
\label{fig:david2}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.33\linewidth]{img/david_3_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (3 бит).}
|
||||
\label{fig:david3}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.33\linewidth]{img/david_4_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (4 бит).}
|
||||
\label{fig:david4}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.3\linewidth]{img/david_7_20.jpg}
|
||||
\includegraphics[width=0.33\linewidth]{img/david_5_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (5 бит).}
|
||||
\label{fig:david5}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.33\linewidth]{img/david_6_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (6 бит).}
|
||||
\label{fig:david6}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.33\linewidth]{img/david_7_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (7 бит).}
|
||||
\label{fig:david7}
|
||||
\end{figure}
|
||||
|
||||
\begin{figure}[h!]
|
||||
\centering
|
||||
\includegraphics[width=0.3\linewidth]{img/david_8_20.jpg}
|
||||
\includegraphics[width=0.33\linewidth]{img/david_8_20.jpg}
|
||||
\caption{Изображение с зашифрованными данными (8 бит).}
|
||||
\label{fig:david8}
|
||||
\end{figure}
|
||||
|
||||
\newpage
|
||||
\phantom{text}
|
||||
\newpage
|
||||
\phantom{text}
|
||||
\newpage
|
||||
На Рис.~\ref{fig:david1}-\ref{fig:david8} представлены результирующие изображения с разным количеством бит, отведённых под зашифрованные данные.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user