Извлечение ключа из имени файла

This commit is contained in:
2024-11-19 14:32:34 +03:00
parent 01003c1ee0
commit 19b8202fa8
2 changed files with 27 additions and 15 deletions

View File

@@ -16,7 +16,7 @@ sourceTextPath = "resources/biography.txt"
sourceImagePath :: String
sourceImagePath = "resources/david.bmp"
encodedImagePath :: String
encodedImagePath = "tmp/david.bmp"
encodedImagePath = "tmp/david_" ++ show caesarShift ++ ".bmp"
decodedTextPath :: String
decodedTextPath = "tmp/biography.txt"
@@ -51,16 +51,22 @@ main = do
putStrLn "\nДекодирование текста из изображения"
readEncodedImageResult <- readImage encodedImagePath
case readEncodedImageResult of
Left err -> putStrLn $ "Ошибка при чтении изображения: " ++ err
Right dynImg -> do
let img = convertRGB8 dynImg
let bits = VU.fromList $ extractBitsFromImage bitsPerByte img
putStrLn $ "10 битов шифра: \"" ++ show (take 10 $ VU.toList bits) ++ "\""
let encryptedTextFromImage = takeWhile (/= '\NUL') (bitsToText bits)
putStrLn $ "10 символов шифра: \"" ++ take 10 encryptedTextFromImage ++ "\""
let decryptedText = decryptCaesar alphabet caesarShift encryptedTextFromImage
putStrLn $ "10 символов текста: \"" ++ take 10 decryptedText ++ "\""
writeFile decodedTextPath decryptedText
putStrLn $ "Текст сохранён по пути: \"" ++ decodedTextPath ++ "\""
case extractShift encodedImagePath of
Just extractedCaesarShift -> do
putStrLn $ "Из названия файла извлечён ключ: " ++ show extractedCaesarShift
readEncodedImageResult <- readImage encodedImagePath
case readEncodedImageResult of
Left err -> putStrLn $ "Ошибка при чтении изображения: " ++ err
Right dynImg -> do
let img = convertRGB8 dynImg
let bits = VU.fromList $ extractBitsFromImage bitsPerByte img
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
putStrLn $ "10 символов текста: \"" ++ take 10 decryptedText ++ "\""
writeFile decodedTextPath decryptedText
putStrLn $ "Текст сохранён по пути: \"" ++ decodedTextPath ++ "\""
Nothing -> putStrLn "Не удалось извлечь ключ."