在论文An Efficient Certificateless Encryption for Secure Data Sharing in Public Clouds中,第2.3节说:
KGC将安全参数 k 作为输入,生成两个素数 p 和 q ,使 q | p - 1。
q | p - 1是什么意思?是 q = 1 - p 吗?我想要求澄清,因为我编写的代码只生成两个随机的大素数:
Random rand = new Random();
BigInteger p = BigInteger.genPseudoPrime(128, 10, rand);
Random rand2 = new Random();
BigInteger q = BigInteger.genPseudoPrime(128, 10, rand2);
do{ q = BigInteger.genPseudoPrime(128, 10, rand2); }
while (p == q);
这可以接受吗?如果没有,我该如何编写代码?
编辑:
我可以知道如何编写代码吗?是否可以生成p,生成q,如果p = q,重新生成它,然后如果(p-1)%q / = 0,重新生成q或其他什么?或者更好的方式是什么?
谢谢!
答案 0 :(得分:4)
在此上下文中,vertical bar “|”是表示可分性的数学符号(不要与除法运算符“/”混淆)。表达式 a | b (大声朗读为&#34; a 划分 b &#34;或&#34; a 是 b 的因子&#34;)表示 a 是 b 的除数。因此, q | p - 1表示 q 必须均匀划分 p - 1.等效地, p 和 q < / em>必须满足某些整数 k 的条件( p - 1)/ q = k 。< / p>