使用Haskell编写一个简单的加密/解密程序
发布时间:2023-12-09 22:30:57
下面是一个使用Haskell编写的简单加密/解密程序的示例。
import Data.Char -- 加密函数,将字符按照给定的偏移量进行移位 encrypt :: Int -> Char -> Char encrypt offset c | isAsciiLower c = chr $ (ord c - ord 'a' + offset) mod 26 + ord 'a' | isAsciiUpper c = chr $ (ord c - ord 'A' + offset) mod 26 + ord 'A' | otherwise = c -- 对字符串中的每个字符进行加密 encryptString :: Int -> String -> String encryptString offset = map (encrypt offset) -- 解密函数,将字符按照给定的偏移量进行反向移位 decrypt :: Int -> Char -> Char decrypt offset c = encrypt (-offset) c -- 对字符串中的每个字符进行解密 decryptString :: Int -> String -> String decryptString offset = map (decrypt offset) -- 示例用法 main :: IO () main = do putStrLn "请输入要加密的字符串:" plaintext <- getLine let encrypted = encryptString 3 plaintext putStrLn $ "加密后的字符串: " ++ encrypted let decrypted = decryptString 3 encrypted putStrLn $ "解密后的字符串: " ++ decrypted
上面的程序提供了加密和解密功能。它使用凯撒密码的思想,通过将字符移动给定的偏移量来加密和解密字符串。示例中的偏移量为3。
程序首先定义了一个 encrypt 函数,用于将单个字符加密。它根据字符的 ASCII 值进行偏移,然后转换为新的字符。encrypt 函数根据字符类型(小写字母、大写字母和其他字符)选择不同的逻辑进行计算。
然后,程序定义了一个 encryptString 函数,它接受一个偏移量和一个字符串,并对字符串中的每个字符进行加密。它使用 map 函数将 encrypt 应用于字符串中的每个字符。
程序还定义了 decrypt 和 decryptString 函数,用于解密加密的字符串。它们与 encrypt 和 encryptString 函数类似,只是使用负偏移量来进行操作。
最后,main 函数提示用户输入要加密的字符串,并对其进行加密和解密。加密后的字符串和解密后的字符串都会打印出来。
例如,当运行程序并输入 "hello",将会得到以下输出:
请输入要加密的字符串: hello 加密后的字符串: khoor 解密后的字符串: hello
这个示例程序只是一个简单的加密/解密程序,它使用的加密算法容易被破解。在实际使用中,应该使用更安全的加密算法来保护敏感信息的安全性。
