您可以将RSA公共指数设置为您选择的值吗?

时间:2014-12-01 16:05:29

标签: java encryption cryptography rsa public-key-encryption

This网站描述了一种使用库在java中实现RSA的方法。是否有可能控制公共指数的价值? Java将其设置为65537.我知道它是一个合适的值,但是我可以在使用库时更改它吗?

这是他们实施的方式:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(2048);
KeyPair kp = kpg.genKeyPair();
Key publicKey = kp.getPublic();
Key privateKey = kp.getPrivate();
KeyFactory fact = KeyFactory.getInstance("RSA");
RSAPublicKeySpec pub = fact.getKeySpec(kp.getPublic(),
RSAPublicKeySpec.class);
RSAPrivateKeySpec priv = fact.getKeySpec(kp.getPrivate(),
RSAPrivateKeySpec.class);

saveToFile("public.key", pub.getModulus(),
pub.getPublicExponent());
saveToFile("private.key", priv.getModulus(),
priv.getPrivateExponent());

1 个答案:

答案 0 :(得分:1)

是的,你可以,但你应该确定它是一个素数(以模数的大小为界):

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
// 17 is another often used value, beware to use proper RSA padding if you set it to 3
RSAKeyGenParameterSpec kpgSpec = new RSAKeyGenParameterSpec(2048, BigInteger.valueOf(3));
kpg.initialize(kpgSpec);
KeyPair kp = kpg.genKeyPair();

请注意,密钥生成后无法更改。另请注意,如果指数太大(或将多个位设置为1),则会影响公钥操作的速度。 65537 - 默认值 - 是一个很好的值,只有2位设置为1(第四个Fermat或F4)。