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());
答案 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)。