将RSA密文导出为bash中的数字

时间:2018-12-23 13:21:28

标签: bash openssl rsa

我正在尝试使用带有RSA的OpenSSL加密消息并打印结果模数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 :(得分:1)

您目前的问题是模棱两可的。这句话

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,它将把两个字节解释为一个十进制数,依此类推。 但是,这会将多个结果打印到屏幕上。

从您的问题来看,您实际上可能只想计算某种校验和。在这种情况下,您可能会对md5sumshasum感兴趣。

在没有进一步说明的情况下,无法给出更准确的答案。

答案 1 :(得分:0)

您需要在算术表达式中写入cipher.txt value 以及实际的算术运算。

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