gpt4 book ai didi

java - 为什么 Java 中的 BigInteger.isProbablePrime() 函数对负数返回 true?

转载 作者:行者123 更新时间:2023-11-29 08:39:15 25 4
gpt4 key购买 nike

我正在用 Java 实现 RSA 公钥加密算法。它需要生成两个随机素数。我一直在使用 SecureRandom 类生成两个 1024 位数字来创建一个 2048 位 key 。我使用 BigInteger 类处理数字。我使用 isProbablePrime() 函数来确定它是否为素数,确定性为 100。但是,我注意到此函数对负数返回 true,即使根据定义,素数不能为负数。

最佳答案

关于质数,我可能指出了它 not matter .但是重要的是,在将1024个随机位转换为整数时,您必须考虑哪种方法是正确的;将其视为已签名(就像您一样)还是将其视为未签名?

因此,例如在 8 位中,如果我随机生成 11010011,当被视为素数的无符号整数时,它是 211

如果我将相同的位 11010011 视为有符号整数,我会得到 -45 这不是质数,即使您接受负质数也是如此。

弄错了,您的代码将错误地排除有效 key 并错误地接受无效 key 。如果为了安全起见排除所有负数,那么您将只会得到 1023 位质数(二进制补码负数的最高有效位始终为 1)。

因此您处理从位到整数的转换的方式能够避免负数并避免负素数的整个问题,并且 RSA 将只有一个正确解释被选为 key 的数字。我的猜测是解释是无符号的。

关于java - 为什么 Java 中的 BigInteger.isProbablePrime() 函数对负数返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com