Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- . matrix.sh
- . mods.sh
- . translator.sh
- function hill_decrypt {
- local input=( $@ )
- key=($(letters_to_numbers $1))
- ciphertext=($(letters_to_numbers $2))
- if [ $((${#ciphertext[@]}%2)) -ne 0 ]; then
- echo "ERROR: Cipher text length must be even number!!"
- return
- fi
- det=$(getdet ${key[@]})
- det=$(mod $det 26)
- det=$(frac_mod $det 26)
- #~ echo "frac mod determinant is" $det
- inverse=( \
- $(mod $((${key[3]} * $det)) 26) \
- $(mod $((-${key[1]} * $det)) 26) \
- $(mod $((-${key[2]} * $det)) 26) \
- $(mod $((${key[0]} * $det)) 26) \
- )
- #~ echo "inverse of the key is" ${inverse[@]}
- plaintext=($(multiply ${inverse[@]} ${ciphertext[@]}))
- #~ echo "Decrypted numbers: "${plaintext[@]}
- echo $(numbers_to_letters ${plaintext[@]})
- }
- # Hill Cipher Encrypt
- # Appends "X" to the end of the input if the input is odd-numbered
- function hill_encrypt {
- KEY=$1
- PLAINTEXT=$2
- if (( ${#PLAINTEXT} % 2 ))
- then
- PLAINTEXT+=X
- fi
- K=($(letters_to_numbers "$KEY"))
- P=($(letters_to_numbers "$PLAINTEXT"))
- E=($(multiply ${K[@]} ${P[@]}))
- echo $(numbers_to_letters ${E[@]})
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement