我正在尝试使用带有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
谢谢。
答案 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
,它将把两个字节解释为一个十进制数,依此类推。
但是,这会将多个结果打印到屏幕上。
从您的问题来看,您实际上可能只想计算某种校验和。在这种情况下,您可能会对md5sum
或shasum
感兴趣。
在没有进一步说明的情况下,无法给出更准确的答案。
答案 1 :(得分:0)
您需要在算术表达式中写入cipher.txt
的 value 以及实际的算术运算。
IFS= read -r cipher < cipher.txt
res=$(( cipher % 10 ))