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
是两个奇素数 p
和 q
的乘积。它的Euler's totient functionphi(n)
是(p - 1) * (q - 1)
,所以是偶数
RSA algorithm的基础是如果两个数a
和b
的模数相等phi(n)
则x^a
和x^b
是相等的模数 n
.
现在我们想要 public 指数 e
和 private 指数 d
这样 d * e
等于 1
模数 phi(n)
。这只有在 e
和 phi(n)
为 coprime 时才有可能。因为 phi(n)
是偶数,所以 e
必须是 奇数 .
此外通常 on 需要 e
尽可能少的 1
位,所以求幂函数更快。由于 e
不能是偶数,也不应该是一个,因此 one 采取某种形式 2^r + 1
,r
通常是 16
.
编辑:抱歉,我错过了你关于 e
积极性的问题。总之不能为负。如果您提供负指数,您将得到:
java.lang.ArithmeticException: BigInteger: modulus not 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
是两个奇素数 p
和 q
的乘积。它的Euler's totient functionphi(n)
是(p - 1) * (q - 1)
,所以是偶数
RSA algorithm的基础是如果两个数a
和b
的模数相等phi(n)
则x^a
和x^b
是相等的模数 n
.
现在我们想要 public 指数 e
和 private 指数 d
这样 d * e
等于 1
模数 phi(n)
。这只有在 e
和 phi(n)
为 coprime 时才有可能。因为 phi(n)
是偶数,所以 e
必须是 奇数 .
此外通常 on 需要 e
尽可能少的 1
位,所以求幂函数更快。由于 e
不能是偶数,也不应该是一个,因此 one 采取某种形式 2^r + 1
,r
通常是 16
.
编辑:抱歉,我错过了你关于 e
积极性的问题。总之不能为负。如果您提供负指数,您将得到:
java.lang.ArithmeticException: BigInteger: modulus not positive
在密钥对生成期间。