2013-10-22 25 views
0

我想使用http://hackage.haskell.org/package/cryptocipher-0.6.1/docs/Crypto-Cipher.html加密一個ByteString。這是我的遺憾嘗試:如何使用cryptocipher加密AES ECB模式?

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) 

它看起來像我需要一些聰明的方式使用makeKeycipherInit,但作爲一個Haskell初學者,我掙扎弄清楚如何使用makeKey

我非常感謝一個簡短的樣本塊或指向正確方向的一個點。

+1

FYI ECB非常不安全 – Wes

回答

3

你應該看看ecbEncrypt的類型。 需要一個cipherAES128你的情況)和ByteStringcipher可由cipherInit生產,這需要Key cipherKey s是用makeKey製成的,它需要ToSecureMem(一個ByteString會執行)的實例並返回Either KeyError (Key cipher)。忽略錯誤,您可以簡單地在Either的構造函數Right上進行模式匹配以獲得密鑰。代碼示例如下所示:

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類型在這裏直接,因爲編譯器無法通過自身哪種加密使用的是知道的。

相關問題