Bouncy Castle RSAKeyGenerationPerameters publicExponent 是否必须为正数?

Does the Bouncy Castle RSAKeyGenerationPerameters publicExponent have to be positive?

我正在尝试制作一个部分盲签名程序。我计划使用 产品价格 作为密钥生成 通用信息的一部分 。下面显示的代码会产生异常“Caused by: java.lang.IllegalArgumentException: public exponent cannot be even”.

但是,当使用奇数时,代码运行得非常好

为什么这个数字必须是正数,是否有解决方法,例如添加某种填充函数而不是在它是正数时只加 1?

// Generate a 2048-bit RSA key pair.
    public static AsymmetricCipherKeyPair generateKeyPair() {
        
        RSAKeyPairGenerator generator = new RSAKeyPairGenerator();
        
        // Initialise the key pair generator
        // TODO: Change so that the common information is the product price
        generator.init(new RSAKeyGenerationParameters(
                    new BigInteger("10000", 16), new SecureRandom(), 2048,
                    80));
        
        // return an AsymmetricCipherKeyPair containing the generated keys.
        return generator.generateKeyPair();
    }

RSA 密钥的 public 模数 n 是两个奇素数 pq 的乘积。它的Euler's totient functionphi(n)(p - 1) * (q - 1),所以是偶数

RSA algorithm的基础是如果两个数ab的模数相等phi(n)x^ax^b是相等的模数 n.

现在我们想要 public 指数 eprivate 指数 d这样 d * e 等于 1 模数 phi(n)。这只有在 ephi(n)coprime 时才有可能。因为 phi(n) 是偶数,所以 e 必须是 奇数 .

此外通常 on 需要 e 尽可能少的 1 位,所以求幂函数更快。由于 e 不能是偶数,也不应该是一个,因此 one 采取某种形式 2^r + 1r 通常是 16.

编辑:抱歉,我错过了你关于 e 积极性的问题。总之不能为负。如果您提供负指数,您将得到:

java.lang.ArithmeticException: BigInteger: modulus not positive

在密钥对生成期间。