gpt4 book ai didi

java - 两个不同的私钥

转载 作者:行者123 更新时间:2023-12-01 18:15:52 24 4
gpt4 key购买 nike

我正在尝试进行数字签名,然后验证 AuthnRequest。我使用以下命令生成了私钥和公钥证书:

openssl genrsa -out privatekey.pem 2048
openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365
openssl pkcs12 -export -out public_privatekey.pfx -inkey privatekey.pem -in publickey.cer

通过以下命令将 PFX 转换为 JKS:

keytool -importkeystore -srckeystore public_privatekey.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

我正在使用以下 java 代码访问该私钥条目和公钥证书:

KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keystoreFile), "dps123!@#".toCharArray());

KeyStore.PrivateKeyEntry keyEntry = (KeyStore.PrivateKeyEntry) ks.getEntry("1", new KeyStore.PasswordProtection("dps123!@#".toCharArray()));
java.security.cert.X509Certificate cert = (java.security.cert.X509Certificate) keyEntry.getCertificate();

我必须通过以下方式将私钥值打印到控制台:

String key = Base64.encode(keyEntry.getPrivateKey().getEncoded());
System.out.println(key);

当我比较字符串“key”的内容和“privatekey.pem”文件中的内容时,两者是不同的。是我理解不正确还是在代码中获取私钥值时出现问题?

最佳答案

私钥存储有多种格式。其中有PKCS#1PKCS#8 。它们的不同之处在于加密算法和 ASN.1 结构。此外,PKCS#8还支持除RSA之外的其他 key 算法。

例如,这是未加密的 PKCS#8 文件的第一个字节的 ASN.1 转储:

0000  4BE: SEQUENCE {
0004 1: INTEGER 0
0007 D: SEQUENCE {
0009 9: OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1)
: (PKCS #1)
0014 0: NULL
: }
0016 4A8: OCTET STRING, encapsulates {
001A 4A4: SEQUENCE {
001E 1: INTEGER 0
0021 101: INTEGER
: 00 B3 17 E6 31 3C 36 24 ....1<6$

PKCS#1 格式的相同 key (同样只有前几个字节,文件的其余部分基本上是原始 key ):

0000  4A4: SEQUENCE {
0004 1: INTEGER 0
0007 101: INTEGER
: 00 B3 17 E6 31 3C 36 24 ....1<6$

该网站包含这两种格式的更详细说明: https://tls.mbed.org/kb/cryptography/asn1-key-structures-in-der-and-pem

Java 通常生成 PKCS#8 格式,而 OpenSSL 支持这两种格式并可以在它们之间进行转换:https://www.openssl.org/docs/apps/pkcs8.html

KeyStore Explorer还可以生成、处理和转换这两种格式。

因此,如果您使用 OpenSSL 或 KSE 将 privatekey.pem 转换为 PKCS#8,它应该与 System.out.println(key) 的输出相同:

openssl pkcs8 -topk8 -in privatekey.pem -out privatekey.pkcs8 -nocrypt

关于java - 两个不同的私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29611175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com