Экспорт зашифрованного текста RSA как числа в bash - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь зашифровать сообщение, используя OpenSSL с RSA, и распечатать полученный модуль 10. Все работает нормально, кроме операции с модулем.Это дает недопустимую арифметическую ошибку оператора.Я подозреваю, что либо $(( )) не работает должным образом, либо результат шифрования не в подходящей форме для преобразования в число.Вот код

#!/bin/bash

openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
cat plain.txt \
  | openssl rsautl -encrypt -pubin -inkey public.pem \
  > cipher.txt
cat  cipher.txt
res=$((cipher.txt)) % 10
echo $res

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Ваш вопрос в его нынешнем виде неоднозначен.Это утверждение

res=$((cipher.txt)) % 10

не имеет никакого смысла.Помимо синтаксических ошибок, вы не можете просто интерпретировать весь файл как одно огромное целое число и затем выполнить операцию модуля над ним.Существует ограничение на целочисленный размер, который может обрабатывать Bash.Одна возможность, которая может приблизиться к тому, что вы хотите, состоит в том, чтобы вычислить несколько порций данных и затем напечатать результат:

declare -i SIZE=1

while read -a d;do
    for ((i=1;i<${#d[@]};i++));do
        echo $((${d[$i]} % 10))
    done
done < <(od -t u$SIZE cipher.txt )

Приведенный выше код будет интерпретировать каждый байт cipher.txt как десятичное число ивыполнить расчет модуля на нем.Если вы измените SIZE=2, он будет интерпретировать два байта как одно десятичное число и так далее.Это, однако, выведет на экран несколько результатов.

Судя по вашему вопросу, вы можете просто захотеть вычислить какую-то контрольную сумму.В этом случае md5sum или shasum могут представлять интерес для вас.

Без дополнительных разъяснений более точный ответ не может быть дан.

0 голосов
/ 23 декабря 2018

Вам необходимо значение , которое вы записали в cipher.txt в арифметическом выражении, вместе с фактической арифметической операцией.

IFS= read -r cipher < cipher.txt
res=$(( cipher % 10 ))
...