init. atbash, simple encodings

This commit is contained in:
lulzette
2021-05-19 11:48:56 +03:00
parent 163af7d190
commit 3ef907f3e3
6 changed files with 175 additions and 0 deletions

43
src/Main.hs Normal file
View File

@@ -0,0 +1,43 @@
module Main where
import Data.Bits
import Data.Char
import Data.List
import Data.Maybe
{-
- https://kmb.cybber.ru/crypto/frequency_analysis_substitution/main.html
- Здесь будет конвертатор в base32/64
- Шифр цезаря
- Шифр простой замены
- Шифр Атбаша
-}
-- Шифр Атбаша. Простой шифр с заменой алфавита
-- a = e, r=d и т.д.
atbashEnc :: String -> String
atbashEnc input = do
let alp = ['a'..'z']
let encAlp = "qadewsrgfthuyjkiolpzcxvnbm"
map (\x -> encAlp !! (fromJust (elemIndex x alp))) input
-- Декодер
atbashDec :: String -> String
atbashDec input = do
let alp = ['a'..'z']
let encAlp = "qadewsrgfthuyjkiolpzcxvnbm"
map (\x -> alp !! (fromJust (elemIndex x encAlp))) input
-- Простейший шифр, просто сдвигает алфавит на 1
-- a = b, b = c, ...
simpliestEnc :: String -> String
simpliestEnc input =
map (\x -> chr(ord(x) + 1)) input
main :: IO ()
main = do
putStrLn "Simpliest encoding, just +1 to each letter:"
print (simpliestEnc "abcdefz")
putStrLn "atbash Encryption:"
print . atbashEnc $ "test"
print . atbashDec $ ( atbashEnc "test" )