【发布时间】:2014-09-15 13:19:02
【问题描述】:
为了与服务进行互操作,我必须使用 RSA 加密一些值,其密钥大小似乎小于 Java 上的最小 512 位。有什么办法可以放宽这个政策?
BigInteger e = new BigInteger("13082845549543033994073971762152947067", 10);
BigInteger m = new BigInteger("229110545576645850236522690668306544921", 10);
RSAPublicKeySpec spec = new RSAPublicKeySpec(m, e);
KeyFactory keyFac = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFac.generatePublic(spec);
// ^^^^ java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: RSA keys must be at least 512 bits long
【问题讨论】:
-
我不得不质疑这种努力的意义 - RSA 512 位已经很容易破解(请参阅 this),那是 10 多年前的事了 - 现在它不会接近那个长。我想您可以使用大量反射来消除任何此类限制,或者可能找到一个允许此类事情的不同 JVM,甚至可能实现您自己的 RSA 套件,但这些都无助于底层安全问题。
-
我必须与这个系统互操作。它的设计非常糟糕,带有自签名密钥和不匹配的主机名。但是程序员必须做他/她必须做的事情。
标签: java encryption rsa public-key