我有一个java.security.interfaces.rsaprivateKey和相应的java.security.interfaces.rsapublicKey(仅包含)模、私有指数和公共指数。
如果我正确理解RSA,应该可以恢复java.security.interfaces.RSAPrivateCrtKey(用于CRT密钥)的数字。
如果是,我该怎么做?(我假设已经有了一些实现)。
这样做是可能的,并且有一个相对快速的算法来找到参数。下面是一些说明该算法的Java代码。
/**
* Find a factor of n by following the algorithm outlined in Handbook of Applied Cryptography, section
* 8.2.2(i). See http://cacr.uwaterloo.ca/hac/about/chap8.pdf.
*
*/
private static BigInteger findFactor(BigInteger e, BigInteger d, BigInteger n) {
BigInteger edMinus1 = e.multiply(d).subtract(BigInteger.ONE);
int s = edMinus1.getLowestSetBit();
BigInteger t = edMinus1.shiftRight(s);
for (int aInt = 2; true; aInt++) {
BigInteger aPow = BigInteger.valueOf(aInt).modPow(t, n);
for (int i = 1; i <= s; i++) {
if (aPow.equals(BigInteger.ONE)) {
break;
}
if (aPow.equals(n.subtract(BigInteger.ONE))) {
break;
}
BigInteger aPowSquared = aPow.multiply(aPow).mod(n);
if (aPowSquared.equals(BigInteger.ONE)) {
return aPow.subtract(BigInteger.ONE).gcd(n);
}
aPow = aPowSquared;
}
}
}
public static RSAPrivateCrtKey createCrtKey(RSAPublicKey rsaPub, RSAPrivateKey rsaPriv) throws NoSuchAlgorithmException, InvalidKeySpecException {
BigInteger e = rsaPub.getPublicExponent();
BigInteger d = rsaPriv.getPrivateExponent();
BigInteger n = rsaPub.getModulus();
BigInteger p = findFactor(e, d, n);
BigInteger q = n.divide(p);
if (p.compareTo(q) > 0) {
BigInteger t = p;
p = q;
q = t;
}
BigInteger exp1 = d.mod(p.subtract(BigInteger.ONE));
BigInteger exp2 = d.mod(q.subtract(BigInteger.ONE));
BigInteger coeff = q.modInverse(p);
RSAPrivateCrtKeySpec keySpec = new RSAPrivateCrtKeySpec(n, e, d, p, q, exp1, exp2, coeff);
KeyFactory kf = KeyFactory.getInstance("RSA");
return (RSAPrivateCrtKey) kf.generatePrivate(keySpec);
}
如何从(在清单中)使用java?
问题内容: 我正在使用蜡染来处理SVG图像。有什么办法可以从SVG文件中获取java.awt.image.BufferedImage吗? 我知道有一些转码器,我可以使用它们将SVG转码为PNG,然后使用ImageIO.read()加载该PNG,但是我不想拥有临时文件。 问题答案: 使用蜡染,如下所示:
问题内容: 我正在使用HttpClient 4.1.2 那么,如何获取Cookie值? 问题答案: 请注意:第一个链接指向曾经在HttpClient V3中工作的内容。在下面找到与V4相关的信息。 这应该回答你的问题 http://www.java2s.com/Code/Java/Apache- Common/GetCookievalueandsetcookievalue.htm 以下与V4有关:
问题内容: 如何从BufferedImage对象获取InputStream?我尝试了这个,但是ImageIO.createImageInputStream()总是返回NULL 图片缩略图已正确生成,因为我可以成功将 bigImage绘制 到 JPanel 。 谢谢。 问题答案: 如果您尝试将图像保存到文件,请尝试: 如果您只想读取字节,请尝试执行写调用,但将其传递给ByteArrayOutputS
问题内容: 我想从java.io.InputStream读取超时。显然,执行此操作的正确方法是使用java.nio.channels.SelectableChannel和java.nio.channels.Selector。不幸的是,目前尚不清楚如何从InputStream转到SelectableChannel。 InputStream来自非常规来源-http://java.sun.com/pro
问题内容: 是否可以从ServletContext获取HttpServletRequest? 问题答案: 是否可以从ServletContext获取HttpServletRequest? 没有。 该代表的应用程序。该应用程序可以涵盖许多会话和请求。但是您无法通过来获取“当前正在运行”的请求或会话。有关servlet和作用域如何工作的详细信息,可以在以下相关答案中找到:servlet如何工作?实例化