Advertisement
Guest User

Untitled

a guest
Aug 24th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. #!/bin/bash
  2. . matrix.sh
  3. . mods.sh
  4. . translator.sh
  5.  
  6. function hill_decrypt {
  7. local input=( $@ )
  8. key=($(letters_to_numbers $1))
  9. ciphertext=($(letters_to_numbers $2))
  10.  
  11. if [ $((${#ciphertext[@]}%2)) -ne 0 ]; then
  12. echo "ERROR: Cipher text length must be even number!!"
  13. return
  14. fi
  15.  
  16. det=$(getdet ${key[@]})
  17. det=$(mod $det 26)
  18. det=$(frac_mod $det 26)
  19.  
  20. #~ echo "frac mod determinant is" $det
  21.  
  22. inverse=( \
  23. $(mod $((${key[3]} * $det)) 26) \
  24. $(mod $((-${key[1]} * $det)) 26) \
  25. $(mod $((-${key[2]} * $det)) 26) \
  26. $(mod $((${key[0]} * $det)) 26) \
  27. )
  28.  
  29. #~ echo "inverse of the key is" ${inverse[@]}
  30.  
  31. plaintext=($(multiply ${inverse[@]} ${ciphertext[@]}))
  32.  
  33. #~ echo "Decrypted numbers: "${plaintext[@]}
  34.  
  35. echo $(numbers_to_letters ${plaintext[@]})
  36. }
  37.  
  38. # Hill Cipher Encrypt
  39. # Appends "X" to the end of the input if the input is odd-numbered
  40. function hill_encrypt {
  41. KEY=$1
  42. PLAINTEXT=$2
  43.  
  44. if (( ${#PLAINTEXT} % 2 ))
  45. then
  46. PLAINTEXT+=X
  47. fi
  48.  
  49. K=($(letters_to_numbers "$KEY"))
  50. P=($(letters_to_numbers "$PLAINTEXT"))
  51.  
  52. E=($(multiply ${K[@]} ${P[@]}))
  53. echo $(numbers_to_letters ${E[@]})
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement