0

我想使用http://hackage.haskell.org/package/cryptocipher-0.6.1/docs/Crypto-Cipher.html来加密一个字节串。这是我很抱歉的尝试:

import Crypto.Cipher
import Crypto.Cipher.AES (AES128)
import Crypto.Cipher.Types
import qualified Data.ByteString.Char8 as B

key = B.pack "It a 128-bit key"

main = do 
     let ctext = ecbEncrypt key (B.pack "16 bytte ssecret") 
     print (B.unpack ctext)

看起来我需要以某种聪明的方式使用makeKey和使用cipherInit,但作为一个 Haskell 初学者,我正在努力弄清楚如何使用makeKey.

我非常感谢一个简短的示例块或指向正确方向的点。

4

1 回答 1

3

你应该看看类型ecbEncrypt。它需要一个cipher(AES128在你的情况下) 和一个ByteString. cipher可以由 产生cipherInit,这需要Key cipher. Keys 是用 制作的makeKey,它接受ToSecureMem(a ByteStringwill do) 的一个实例并返回一个Either KeyError (Key cipher). Right忽略错误,您可以简单地对构造函数进行模式匹配Either以获取密钥。代码示例如下所示:

import Crypto.Cipher
import Crypto.Cipher.Types
import qualified Data.ByteString.Char8 as B

keyString = B.pack "It a 128-bit key"

Right key = makeKey keyString

aes128 :: AES128
aes128 = cipherInit key

ptext = B.pack "16 bytte ssecret"

ctext = ecbEncrypt aes128 ptext

main = putStrLn $ B.unpack ctext

我在aes128这里直接指定了类型,因为编译器本身无法知道您使用的是哪种密码。

于 2013-10-22T14:36:06.277 回答