欢迎访问宙启技术站
智能推送

使用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 应用于字符串中的每个字符。

程序还定义了 decryptdecryptString 函数,用于解密加密的字符串。它们与 encryptencryptString 函数类似,只是使用负偏移量来进行操作。

最后,main 函数提示用户输入要加密的字符串,并对其进行加密和解密。加密后的字符串和解密后的字符串都会打印出来。

例如,当运行程序并输入 "hello",将会得到以下输出:

请输入要加密的字符串:
hello
加密后的字符串: khoor
解密后的字符串: hello

这个示例程序只是一个简单的加密/解密程序,它使用的加密算法容易被破解。在实际使用中,应该使用更安全的加密算法来保护敏感信息的安全性。