使用轻量级API生成Bouncy Castle RSA密钥对
令人惊讶的是,网络上关于使用Bouncy Castle的轻量级API的信息很少。看了一会儿之后,我得以整理出一个基本的例子:
RSAKeyPairGenerator generator = new RSAKeyPairGenerator();generator.init(new RSAKeyGenerationParameters
(
new BigInteger("10001", 16),//publicExponent
SecureRandom.getInstance("SHA1PRNG"),//prng
1024,//strength
80//certainty
));
AsymmetricCipherKeyPair keyPair = generator.generateKeyPair();
我有RSA的一个基本的了解,并且会在幕后数学,让我明白了什么publicExponent
和strength
是。我想publicExponent
是指一个互质数,phi(pq)
只要使用适当的填充,它就可以很小(如3)。但是,我不知道certainty
指的是什么(提到某个地方它可能指的是百分比,但我想确定)。的使用SecureRandom
是不言自明的。RSAKeyGenerationParameters的文档完全毫无价值(毫无疑问)。我唯一的猜测是,它与生成的键的准确性有关,但是我还是想确定一下。所以我的问题是certainty
和的适当值是publicExponent
多少?
PS:请不要回答“这取决于上下文-
您希望信息的安全性”。除非另有说明,否则假定最高的安全级别(即4096位RSA密钥或更高)是非常安全的…我也希望获得链接的链接,这些链接提供了使用Bouncy
Castle的轻量级API的很好的示例(我不喜欢所有对JCA实施或与此有关的示例感兴趣的人。
回答:
您正在为两个使用正确的值。
publicExponent应该是Fermat编号。0x10001(F4)是当前推荐值。3(F1)也被认为是安全的。
RSA密钥生成需要素数。但是,不可能生成绝对质数。像任何其他加密库一样,BC使用可能的质数。确定性表示您希望数字是质数的确定性。任何高于80的值都会大大减慢密钥生成的速度。
请注意,在素数不是真素数的情况下,由于BC检查相对素数,因此RSA算法仍然可以使用。
以上是 使用轻量级API生成Bouncy Castle RSA密钥对 的全部内容, 来源链接: utcz.com/qa/399259.html