将 java.security.PrivateKey 转换为字符串

xyb*_*rek 1 java base64 bouncycastle x509

PrivateKeya 转成Stringwith的方法有哪些

-----BEGIN PRIVATE KEY-----并且-----END PRIVATE KEY-----可以用作要上传到服务器的私钥文件。

其实现是sun.security.rsa.RSAPrivateCrtKeyImplgetFormat()PKCS#8

小智 5

我正在使用Bouncy Castle 1.57

您可以使用该类org.bouncycastle.openssl.jcajce.JcaPEMWriter

StringWriter sw = new StringWriter();
JcaPEMWriter writer = new JcaPEMWriter(sw);
writer.writeObject(privateKey);
writer.close();
System.out.println(sw.getBuffer().toString());
Run Code Online (Sandbox Code Playgroud)

输出将不完全是你所要求的(它有RSA PRIVATE KEY而不只是PRIVATE KEY):

StringWriter sw = new StringWriter();
JcaPEMWriter writer = new JcaPEMWriter(sw);
writer.writeObject(privateKey);
writer.close();
System.out.println(sw.getBuffer().toString());
Run Code Online (Sandbox Code Playgroud)

如果你想要确切的BEGIN PRIVATE KEY(没有RSA),我找不到直接的方法,所以你必须使用replaceAll(不漂亮,但无论如何):

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCLvmDlBlvtN+hJjGy46Q5EyFoJmpoReiXvOVx98BQblqWe7698
zwEJTf/9cfmg1M+qXhPqIPSWU61hPuh/GOZIfQAzAoGnCvZP4v8nGVhcYnnrxCQA
Pd7jdxPmQGbtvTW0cbJpBK44KknHAVdlwDZVqkweTE9c48jHXIHPNX6THwIDAQAB
AoGAczy/cp3X2Lst1tjyH1ow5g/CEAFp49eyyJ+o4kHEkyub0IEfWfDqjd3AqCQB
EtvrlDaYfY5HpF/ErljOKWFDJG8ealhGgZgLYhy7QCs2CUeUN1SkULvxcqLTjzD0
qQAfA1Xm3TYwIV4RB6TSbkr+iJeviz2FxcqjJWAyqh5bVAECQQDhI1/CppGMWPnN
pMBqK0kyk+yc00KB/xbyqzWVgV/de+5uU6YHmXwW29NdgrLt3+QXMwkLlDML7lBn
jawJ1KmfAkEAnuZPm7WYzsu/WvW6iMwBJDNiMC88Q6RPdlboY8mPNysewlAZubJ+
bd+l0E9P6Kdoi4mKqmWK91vRwambFaimgQJBAJPnF0va/ZdEBKfSag3VbfrqLvE/
4FtiZ4L4cvVKzt3EQvj7vwETFfA2bf7qk/2trjyHbJPMwlQ+NVgyPCkhKmUCQCMc
PsDoKmCfUqP1ogbyFNp75BlDhqxnlQtP/r913QhSpdRHwLdwglEi1s+lhsGgpBAZ
DyPBlig8CKgjItpxToECQGDvZdny/lwUOhlJaJYcpS4pKOG0Qzz5QyTdFjkzJlTo
tDElfWCoAc68YUU1N/XvHRr7P+2jLdh1+kjF28f0zlM=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

输出:

String pem = sw.getBuffer().toString().replaceAll("RSA PRIVATE", "PRIVATE");
System.out.println(pem);
Run Code Online (Sandbox Code Playgroud)

您只需确保您的代码能够正确解析此内容(我不确定 Bouncy Castle 是否会在没有 的情况下解析此内容RSA)。