提问人:chyxo 提问时间:12/29/2022 最后编辑:STerliakovchyxo 更新时间:12/30/2022 访问量:65
尝试生成 2048 位长质数时出现语法错误
Syntax error while trying to generate a 2048bit long prime number
问:
我正在尝试生成一个 2048 位长的素数,这是我到目前为止的代码:
#!/bin/bash
generate_random() {
hex=$(head -c 256 /dev/urandom | xxd -p)
bc <<< "ibase=16; $hex"
}
p=$(generate_random)
echo "$p"
在运行脚本时,我后面跟着随机零。(standard_in) 1: syntax error
任何人都知道是什么导致了这个错误,我该如何解决它?我试过了,但它没有添加任何有用的信息。bash -x
答:
3赞
STerliakov
12/29/2022
#1
首先,仅将大写字母理解为十六进制数字(至少默认情况下是这样)。其次,您的输出中有分隔符,因此您可以稍后生成多个数字。bc
xxd
bc
这应该有效:
#!/bin/bash
generate_random() {
hex=$(head -c 256 /dev/urandom | xxd -p -u | tr -d '\n')
bc <<< "ibase=16; $hex"
}
p=$(generate_random)
echo "$p"
-u
标志指示它将大写字母输出为数字,并删除分隔符。xxd
tr
输出示例:
84404284040092528807148386035025161100484110236893077703095592941720\
00537078513504880246726730474236368181068985417211434943913923235822\
01284401417146606673073772989889733010524123703686975444423088406509\
44767677616371794606797386146855833950295071249000795855185540560405\
62673903614333076371092344026999031152809898928396395497832309795471\
93897215963003601022703133486344387720277877558264139632520964120681\
97764906669023878701319760947789227343517474218584987497204300184084\
62846775760153647010072072799120566180042021620262646969602253704108\
06274157727080642084167983313757899766696995668747042179553171962777\
5716
要删除换行符和反斜杠,您可以执行以下操作
p_joined=$(echo "$p" | sed -z 's=\\\n==g')
echo "$p_joined"
相反。
0赞
M. Nejat Aydin
12/30/2022
#2
另一种方式可能是
printf -v hex '%s' $(od -v -An -N256 -x /dev/urandom)
read dec < <(bc <<< "ibase=16; ${hex^^}")
echo $dec
下一个:命令替换表达式中的括号
评论
$hex
bc
$hex
/dev/urandom
bc
$hex
bc <<< "ibase=16; 868f"
bc