RSA шифрование с использованием функции мод Linux - PullRequest
0 голосов
/ 26 апреля 2018

Используя оболочку bash, я пытаюсь вычислить 78390 ^ 91025 (мод 180577) Таким образом, используя базовую 78290 мощность 910025 и применяя модуль 180577, я хочу получить следующую логику: y=base для i = 1 к экспоненте-1 y := (y*base) mod 'modulus' next i print y

При этом я надеюсь сэкономить память и память при одновременном получении правильного результата.

#!/bin/bash
# encrypt RSA script
base=78390                  # base number for operations
power=91025                     
               # reads input 'power' from the user   command line
modulus=180577                  # relative prime number to find remainders
y=base                          # place holder for next iteration

if [ -f "encrypt.txt" ]; then   # if this file exists then remove it
rm encrypt.txt
fi
i=0                             # initialize the variable i
while IFS= read -r -n1 char
do 
printf -v num %d "'$char"   # assigns a numerical value to characters
if [ $num != 0 ]; then
   let "num = num - 97"
   ((i++))
   let "keys[i]=num"
fi
done < "$base"              # pulls the value of base from storage
let "ilength = i"
echo length of base $ilength

i=0                             # initialize counter variable
while IFS= read -r -n1 char
do

#   Convert characters to ASCII equivalent   numbers
printf -v num %d "'$char"
if [[ $num != 0 ]] && [[ $num != 32 ]]; then
    ((i++))                 # increments the value of i; the counter
let "im1=i-1"
let "imod=im1%ilength"
let "ii=imod+1"
let "base=keys[ii]"
let "num=num-97"            # Reset ASCII value to begin at 0
let "num=num*$base"         # Multiply by base
let "num=num % modulus"     # Apply modulus
let "num=num+97"            # Return to ASCII value
                            # Convert ASCII numbers to characters
printf -v newchar \\$(printf '%03o' "$num")
    echo $newchar >> output.txt
fi
if [ $num = 32 ]; then
   echo $char >> output.txt # prints the value of char to file
fi
if [ $num = 0 ]; then
    echo '@' >> output.txt  
# prints location of error to file respective to line which error 
occurred 
fi

done < "$INPUT"
cat output.txt | tr '\n' Z | sed 's/ZZ/ /g' | sed 's/Z//g' | 
sed 's/@/\n/g' > encrypt.txt
rm output.txt                   
# Stores output in file names "encrypt" and erases temporary file 
"output.txt"

Спасибо, это то, что у меня есть, я знаю, что ^-1 отсутствует, и я не думаю, что правильно храню y.

...