是PKCS8EncodedKeySpec能够读取PKCS1和PKCS8私钥

问题描述 投票:1回答:1

虽然标题是一个问题,但我只是设法使用相同的代码执行此操作,而我只是不确定PKCS8EncodedKeySpec是否设计用于完成此工作,或者我的私钥是偶然生成的以使其工作(密钥由openssl生成)。

我的代码(pemPath是pem类型的私钥文件路径):

try (BufferedReader bufferedReader = new BufferedReader(new FileReader(pemPath))) {
    StringBuilder stringBuilder = new StringBuilder();
    String line;

    while ((line = bufferedReader.readLine()) != null) {
        if (!line.startsWith("--")) {
            stringBuilder.append(line);
        }
    }

    PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
            Base64.getDecoder().decode(stringBuilder.toString()));
    KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    PrivateKey key = keyFactory.generatePrivate(priPKCS8);
}

我还粘贴PKCS1文件内容:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAoRVeLT5PrbQmFbmbc1zLFJuz5Sx3yTc9IIem13/+gNcrdqqa
QVd/2noPmIm1xUkdQfvRm72k0Mm1s78bcadTsZt4XL2OvAKBA0hyox2re/PLLp05
NP2WKFyF+O2OteZhzQHPxQFBn/Nt1pYbYctV7bbw4RsdQXXz72TY+WBfIg6m/LeG
uPG/4UM5IAw9G2IEOkA/V00rsjOLzRvHyqu473zaFNbaObN9rnakCUFeU07L3Eeo
EBQoZPiIyTAJ8eN/EnaudLrvErOog2E4LcpAOpoUDBdi2XYT0iE0stDoj62zP+gL
ubZQKV81N0qk1KehxeLcHtpXtvlWaITnmIovVQIDAQABAoIBAFw/W2Z3h7PHNgQ8
/cvr+RS9MiFs/NBLhQMLDD3fO8VW87oKazo+PKbGPgYx3tmzTEEMT/ZrfWZgDWF5
cOL+WwycJyqdF4+Ns4pIw/WruRfL/rCcMzWof4Rvr/1lNdPvslRv1CdS190cz+sS
nW28v2HZ4UpYd8GUJfUTgLoXOYPLjYEQx8wri5tOPvAJuCFHCdpx59Fu0xaQP+Uz
3+CSAqdsBL4UKoz0lQ27128BEg/2a6kqhGvC/QHu+Mn0N4wbto8ndfpF8noSAhx2
s38q/E9gVYxKjA1g2yl74irPsPWT+gq97nQJ4jYRog2W4I+KYYDAL9xP3ux+kGis
6h1GWcECgYEA1Bh/EgwlamT+y5oJhZgYEQAFtCZEOjyjWuJRwYTuaKrTJjudk0xZ
KPsGy8+Wi3QYsGUowAsQNws+3hzD1dIqWO92CXgkaJ1iZ3mVMsR+xgdb67jFrzZM
PerqXK3wOlaDe/Mikfyqcp9KERuSVKi/XMv7G/1ZaYk4/SPElqcXy1ECgYEAwm2Z
1Wy/E0uQ8Aj7x1nujCUQjvmTWhkU2aHW/1+STjERfXv5XdaR2N6tFSpWRRHAezHG
5b1NmskNKHCtYAdWFuZC2TXUoCVpnhZnS5gAf1H+konKjeknlLgYIZDB59hzMmCE
uOGEHk/rtZQuB4nR0jYk1eE14IOCQe6j73EsmsUCgYEAoINBd6kVj+WLJw8WcbJf
VE5OAr6LF//YKOnqsagmvbO6RM8NO/Kl72u7AvfBmRxtquGD64Lz7JRoKbRfSSza
u5/OFvCDrWCenmzXSyqGPtxG5qhZg3Z2UM2+PBGvIpdivqWM3ir32/NNHJFfNw7W
dCYzjkU4K7ScGoe9Ob6PNWECgYBrm514sidO1pPxRgeT3gJZLmprt1YGl7sieKA1
1v9yp1W2zdbGSOuPzC6feD8nGxwdEv+yR4OcF4pgx3wtmeHb6rU04sY7nHlINb4V
6Jrd3NO45upkgJaXiQxSB3xKhVG8oA7VBHvLCxC5/rk7Etw+LBlXBr569E4zj5DM
BSdawQKBgQC55RdlSLarKyEF9bMVPQDQ0Qko6pS+pw2kmg2CMXhk7eBsTUAMuVh4
/FNu3h6QiGpHstV1NRmF9oPRTltd8Mh3aCy8JAOY9/hZ7NScxKy2j91jQl+geSOC
FPSvfPlyMwPDvR3urCQKYq3NMJ4jWqcle4YX0w/rG5yY05gpQNVWiQ==
-----END RSA PRIVATE KEY-----

和PKCS8文件内容:

-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQChFV4tPk+ttCYV
uZtzXMsUm7PlLHfJNz0gh6bXf/6A1yt2qppBV3/aeg+YibXFSR1B+9GbvaTQybWz
vxtxp1Oxm3hcvY68AoEDSHKjHat788sunTk0/ZYoXIX47Y615mHNAc/FAUGf823W
lhthy1XttvDhGx1BdfPvZNj5YF8iDqb8t4a48b/hQzkgDD0bYgQ6QD9XTSuyM4vN
G8fKq7jvfNoU1to5s32udqQJQV5TTsvcR6gQFChk+IjJMAnx438Sdq50uu8Ss6iD
YTgtykA6mhQMF2LZdhPSITSy0OiPrbM/6Au5tlApXzU3SqTUp6HF4twe2le2+VZo
hOeYii9VAgMBAAECggEAXD9bZneHs8c2BDz9y+v5FL0yIWz80EuFAwsMPd87xVbz
ugprOj48psY+BjHe2bNMQQxP9mt9ZmANYXlw4v5bDJwnKp0Xj42zikjD9au5F8v+
sJwzNah/hG+v/WU10++yVG/UJ1LX3RzP6xKdbby/YdnhSlh3wZQl9ROAuhc5g8uN
gRDHzCuLm04+8Am4IUcJ2nHn0W7TFpA/5TPf4JICp2wEvhQqjPSVDbvXbwESD/Zr
qSqEa8L9Ae74yfQ3jBu2jyd1+kXyehICHHazfyr8T2BVjEqMDWDbKXviKs+w9ZP6
Cr3udAniNhGiDZbgj4phgMAv3E/e7H6QaKzqHUZZwQKBgQDUGH8SDCVqZP7LmgmF
mBgRAAW0JkQ6PKNa4lHBhO5oqtMmO52TTFko+wbLz5aLdBiwZSjACxA3Cz7eHMPV
0ipY73YJeCRonWJneZUyxH7GB1vruMWvNkw96upcrfA6VoN78yKR/Kpyn0oRG5JU
qL9cy/sb/VlpiTj9I8SWpxfLUQKBgQDCbZnVbL8TS5DwCPvHWe6MJRCO+ZNaGRTZ
odb/X5JOMRF9e/ld1pHY3q0VKlZFEcB7McblvU2ayQ0ocK1gB1YW5kLZNdSgJWme
FmdLmAB/Uf6SicqN6SeUuBghkMHn2HMyYIS44YQeT+u1lC4HidHSNiTV4TXgg4JB
7qPvcSyaxQKBgQCgg0F3qRWP5YsnDxZxsl9UTk4CvosX/9go6eqxqCa9s7pEzw07
8qXva7sC98GZHG2q4YPrgvPslGgptF9JLNq7n84W8IOtYJ6ebNdLKoY+3EbmqFmD
dnZQzb48Ea8il2K+pYzeKvfb800ckV83DtZ0JjOORTgrtJwah705vo81YQKBgGub
nXiyJ07Wk/FGB5PeAlkuamu3VgaXuyJ4oDXW/3KnVbbN1sZI64/MLp94PycbHB0S
/7JHg5wXimDHfC2Z4dvqtTTixjuceUg1vhXomt3c07jm6mSAlpeJDFIHfEqFUbyg
DtUEe8sLELn+uTsS3D4sGVcGvnr0TjOPkMwFJ1rBAoGBALnlF2VItqsrIQX1sxU9
ANDRCSjqlL6nDaSaDYIxeGTt4GxNQAy5WHj8U27eHpCIakey1XU1GYX2g9FOW13w
yHdoLLwkA5j3+Fns1JzErLaP3WNCX6B5I4IU9K98+XIzA8O9He6sJApirc0wniNa
pyV7hhfTD+sbnJjTmClA1VaJ
-----END PRIVATE KEY-----

顺便说一句,两个私钥都成功解密相同的密文。 和openssl命令:

openssl genrsa -out rsa_private_key_2048.pem 2048
openssl pkcs8 -topk8 -in rsa_private_key_2048.pem -out pkcs8_rsa_private_key_2048.pem -nocrypt
java rsa private-key jce pkcs#8
1个回答
-1
投票

如果在json有效负载输入中传递PEM格式(PKCS#1格式)字符串的私钥,该怎么办? PKCS8EncodedKeySpec目前适用于PKCS#1和PKCS#8。提供商是SunRsaSign。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.