作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过使用下面的程序,我生成了公钥和私钥,将它们转换为规范。公钥可以从规范中很好地检索到,但私钥不能完全从规范中检索到。我在下面的程序中做错了什么吗?
import java.security.*;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.KeySpec;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.RSAPrivateKeySpec;
public class KeyFactoryEx {
public static void main(String args[]) throws NoSuchAlgorithmException, InvalidKeySpecException{
KeyFactory factory = KeyFactory.getInstance("RSA");
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
KeyPair pair = keyGen.genKeyPair();
PublicKey pubKey = pair.getPublic();
PrivateKey priKey = pair.getPrivate();
byte pubKeyEncoded[] = pubKey.getEncoded();
byte priKeyEncoded[] = priKey.getEncoded();
System.out.println("Public key is");
for(byte b : pubKeyEncoded)
System.out.print(b +" ");
System.out.println();
System.out.println("Private key is");
for(byte b : priKeyEncoded)
System.out.print(b +" ");
System.out.println();
KeySpec pubKeySpec = factory.getKeySpec(pubKey, RSAPublicKeySpec.class);
KeySpec priKeySpec = factory.getKeySpec(priKey, RSAPrivateKeySpec.class);
System.out.println("Key Specifications are generated for public and private keys");
System.out.println("Retrieving public key from pubKeySpec");
PublicKey pubSpecKey = factory.generatePublic(pubKeySpec);
pubKeyEncoded = pubSpecKey.getEncoded();
for(byte b : pubKeyEncoded)
System.out.print(b +" ");
System.out.println();
System.out.println("Retrieving Private key from priKeySpec");
PrivateKey priSpecKey = factory.generatePrivate(priKeySpec);
priKeyEncoded = priSpecKey.getEncoded();
for(byte b : priKeyEncoded)
System.out.print(b +" ");
System.out.println();
}
}
最佳答案
实际上是相同的 key ,只是表示形式不同。如果您尝试打印第一个 PrivateKey 的类,您会注意到它是 RSAPrivateCrtKeyImpl。第二个的类型为 RSAPrivateKeyImpl。
您可以将第一个 PrivateKey 转换为 RSAPrivateCrtKey 并检索 CRT 值以及私有(private)指数和模数。然而,底部的 PrivateKey 不是 RSAPrivateCrtKey,而只是 RSAPrivateKey,因此它没有 CRT 值。
您可以在调用 getKeySpec 时使用 RSAPrivateCrtKeySpec(而不是使用 RSAPrivateKeySpec)来纠正此问题。
关于java - 无法从规范中检索 RSA 私钥,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24819019/
我是一名优秀的程序员,十分优秀!