【问题标题】:Getting private key from file in java从java文件中获取私钥
【发布时间】:2013-12-23 11:30:02
【问题描述】:

我有带有“key”扩展名的私钥文件。我知道它是由“Admin-PKI”程序生成的。我必须将它作为 Java 中的 PrivateKey 类型的对象读取才能使用它来生成数字签名。我尝试打开它在文本编辑器中,但没有“开始私钥”和“结束私钥”等页眉和页脚。我怎么知道使用什么算法生成私钥?我可以在不知道算法的情况下这样做吗?

【问题讨论】:

  • 你也有证书文件吗?
  • 是的,它是带有“pem”扩展名的文件(X509 证书)。
  • 什么是“Admin-PKI”程序?

标签: java cryptography private-key


【解决方案1】:

下面的代码加载一个文件key.pem,你需要bouncycastle 库(http://bouncycastle.org/)

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.security.KeyPair;
import java.security.Security;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMReader;

public class LoadKey {

    public static void main(String [] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());
        KeyPair keyPair = readKeyPair(new File("key.pem"));
    }

    private static KeyPair readKeyPair(File privateKey) throws IOException {
        FileReader fileReader = new FileReader(privateKey);
        PEMReader r = new PEMReader(fileReader);
        try {
            return (KeyPair) r.readObject();
        } catch (IOException ex) {
            throw new IOException("The private key could not be decrypted", ex);
        } finally {
            r.close();
            fileReader.close();
        }
    }
}

编译并运行

javac -cp bcprov-jdk16-146.jar:. LoadKey.java
java -cp bcprov-jdk16-146.jar:. -ea LoadKey

【讨论】:

  • 谢谢,但我的 .pem 文件不包含私钥。(我必须仅使用 SignalCOMProvider 读取它...)
  • 你尝试过它的实际扩展吗?更改代码中的名称并尝试..它可能会自动检测
  • 我收到此错误...线程“main”中的异常 java.lang.ClassCastException: org.bouncycastle.jce.provider.X509CertificateObject 无法转换为 java.security.KeyPair
  • 当我用 .key 扩展文件尝试这段代码时,函数 readKeyPair 返回 null...
  • 从错误来看,你的.key文件好像是X509CertificateObject,你确定这个.key文件是key吗?
猜你喜欢
  • 2011-11-05
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
相关资源
最近更新 更多