我有一个私钥作为字符串。它看起来像这样:
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6zAd...
cRlpnCaW...
VF73XRYo...
...
-----END ENCRYPTED PRIVATE KEY-----
如果我想在Windows中解密它,请在cmd中编写以下内容:
openssl rsa -text -in [File]
[File]是一个.pem文件,其中写入了加密的私钥。 然后cmd问我一个密码短语。 在我输入密码后,我得到另一个.pem文件,里面有这个:
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBA...
sy+CJEnLX...
lbp4Uji0F...
...
-----END RSA PRIVATE KEY-----
这个私钥和证书我需要将数据发送到服务器。
现在我想将 android 设备中的数据发送到此服务器。 我从服务器的GET请求获得的证书,密钥和密码作为JSON,它看起来像这样:
{
"authentications":[
{
"type":"clientCertificate",
"secret":"abc*****",
"pem":"-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6zAd...
cRlpnCaW...
VF73XRYo...
...
-----END ENCRYPTED PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIEJTC...
CEGA1UE...
...
-----END CERTIFICATE-----"
}
]
}
现在我已经创建了证书:
CertificateFactory cf = null;
cf = CertificateFactory.getInstance("X.509");
String obstring = params[0].toString();
String substringcert = obstring.substring(obstring.indexOf("-----BEGIN CERTIFICATE-----"), obstring.indexOf("-----END CERTIFICATE-----") + 25);
String certstring = substringcert.replaceAll("\\\\" + "n", "\n");
InputStream is = new ByteArrayInputStream(certstring.getBytes());
Certificate cert = null;
cert = cf.generateCertificate(is);
我觉得这很有效。 但现在我想从字符串创建/生成密钥。我已经尝试过this了。但是有一个错误:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000b9:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
所以我谷歌为此找到了that post。问题是,android工作室不知道DataTypeConverter
,我试了没有
-----BEGIN ENCRYPTED PRIVATE KEY-----
和
-----END ENCRYPTED PRIVATE KEY-----
。没有任何效果。
如果有可能我想在不导入其他库的情况下这样做。
最后我只想做android,我可以用cmd做什么
openssl rsa -text -in [File]
有什么想法吗?需要更多关于我的问题的信息吗?
感谢您的帮助。