Используя оболочку 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
.