我想使用http://hackage.haskell.org/package/cryptocipher-0.6.1/docs/Crypto-Cipher.html来加密ByteString。这是我的抱歉尝试:
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
。
我非常欣赏一个简短的样本块或指向正确的方向。
答案 0 :(得分:3)
您应该查看ecbEncrypt
的类型。
它需要cipher
(在您的情况下为AES128
)和ByteString
。 cipher
可以生成cipherInit
,这需要Key cipher
。 Key
由makeKey
制作,其中ToSecureMem
(ByteString
将会这样做)并返回Either KeyError (Key cipher)
。忽略错误,您只需在Right
的{{1}}构造函数上进行模式匹配即可获得密钥。代码示例如下所示:
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
的类型,因为编译器不能自己知道你使用的是哪个密码。