Bonjour à tous,
J'ai un TP à faire en Haskell concernant le crypatge ECB et CBC, mais j'ai un problème pour permuter les bits, je n'ai absolument aucune idée de comment faire.
Voici ce que j'ai déjà fait (les signatures des fonctions sont fournies pas le professeur)
{-# LANGUAGE OverloadedStrings #-}
module CryptoSys where
import qualified Data.Char as C
--Ecris un entier en binaire sur 7 bits
toBin :: Int -> [Int]
toBin x = ajoute_zero(toBinTmp x)
--Ecris un entier en binaire
toBinTmp :: Int -> [Int]
toBinTmp 0 = [0]
toBinTmp 1 = [1]
toBinTmp x
| x `mod` 2 == 0 = toBinTmp (x `div` 2) ++ [0]
| otherwise = toBinTmp (x `div` 2) ++ [1]
--ajoute des zero pour avoir des liste de 7 éléments
ajoute_zero :: [Int] -> [Int]
ajoute_zero liste
| length liste < 7 = ajoute_zero ([0] ++ liste)
| otherwise = liste
--transforme un nombre binaire en nombre décimal
toDec :: [Int] -> Int
toDec x = if length x == 1
then (head x)
else (head x)*2^((length x)-1) + toDec (tail x)
--transforme une chaine de caractères en binaire
stringToBin :: String -> [[Int]]
stringToBin [] = []
stringToBin (tete:queue) = toBin(ord tete)stringToBin queue)
per :: Int -> Int
per 1 = 3
per 2 = 1
per 3 = 4
per 4 = 2
per 5 = 6
per 6 = 5
per 7 = 7
per x = error "not definied"
iper :: Int -> Int
iper 1 = 2
iper 2 = 4
iper 3 = 1
iper 4 = 3
iper 5 = 6
iper 6 = 5
iper 7 = 7
iper x = error "not definied"
--permBits :: (Int -> Int) -> [a] -> [a]
--ecb :: (Int -> Int) -> String -> String
xor :: Int -> Int -> Int
xor 0 0 = 0
xor 1 0 = 1
xor 0 1 = 1
xor 1 1 = 0
--cbc_crypt :: (Int -> Int) -> [Int] -> String -> String
--cbc_decrypt :: (Int -> Int) -> [Int] -> String -> String
chr 0 = 'à'
chr 1 = 'â'
chr 2 = 'é'
chr 3 = 'è'
chr 4 = 'ê'
chr 5 = 'ë'
chr 6 = 'î'
chr 7 = 'ï'
chr 8 = 'ô'
chr 9 = 'ö'
chr 10 = 'ù'
chr 11 = 'û'
chr 12 = 'ü'
chr 13 = 'ç'
chr 14 = 'æ'
chr 15 = 'œ'
chr 16 = 'À'
chr 17 = 'Â'
chr 18 = 'É'
chr 19 = 'È'
chr 20 = 'Ê'
chr 21 = 'Ë'
chr 22 = 'Î'
chr 23 = 'Ï'
chr 24 = 'Ô'
chr 25 = 'Ö'
chr 26 = 'Ù'
chr 27 = 'Û'
chr 28 = 'Ü'
chr 29 = 'Ç'
chr 30 = 'Æ'
chr 31 = 'Œ'
chr 127 = '€'
chr x = C.chr x
ord 'à' = 0
ord 'â' = 1
ord 'é' = 2
ord 'è' = 3
ord 'ê' = 4
ord 'ë' = 5
ord 'î' = 6
ord 'ï' = 7
ord 'ô' = 8
ord 'ö' = 9
ord 'ù' = 10
ord 'û' = 11
ord 'ü' = 12
ord 'ç' = 13
ord 'æ' = 14
ord 'œ' = 15
ord 'À' = 16
ord 'Â' = 17
ord 'É' = 18
ord 'È' = 19
ord 'Ê' = 20
ord 'Ë' = 21
ord 'Î' = 22
ord 'Ï' = 23
ord 'Ô' = 24
ord 'Ö' = 25
ord 'Ù' = 26
ord 'Û' = 27
ord 'Ü' = 28
ord 'Ç' = 29
ord 'Æ' = 30
ord 'Œ' = 31
ord '€' = 127
ord x = C.ord x
Mon problème concerne la fonction permBits
Si quelqu'un pouvait m'aider, ce serait vraiment génial !
Cordialement