如何从android中的字符串解密私钥?

时间:2017-08-30 07:51:01

标签: android encryption rsa

我有一个私钥作为字符串。它看起来像这样:

-----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]

有什么想法吗?需要更多关于我的问题的信息吗?

感谢您的帮助。

0 个答案:

没有答案