Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中从字符串中解密私钥?_Android_Encryption_Rsa - Fatal编程技术网

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

如何在android中从字符串中解密私钥?,android,encryption,rsa,Android,Encryption,Rsa,我有一个私钥作为字符串。看起来是这样的: -----BEGIN ENCRYPTED PRIVATE KEY----- MIIE6zAd... cRlpnCaW... VF73XRYo... ... -----END ENCRYPTED PRIVATE KEY----- { "authentications":[ { "type":"clientCertificate", "secret":"abc*****", "pem":"-----BEGIN

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

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6zAd...
cRlpnCaW...
VF73XRYo...
...
-----END ENCRYPTED PRIVATE KEY-----
{
  "authentications":[
    {
      "type":"clientCertificate",
      "secret":"abc*****",
      "pem":"-----BEGIN ENCRYPTED PRIVATE KEY-----
            MIIE6zAd...
            cRlpnCaW...
            VF73XRYo...
            ...
            -----END ENCRYPTED PRIVATE KEY-----
            -----BEGIN CERTIFICATE-----
            MIIEJTC...
            CEGA1UE...
            ...
            -----END CERTIFICATE-----"
    }
  ]
}
如果我想在windows中解密它,我会在cmd中编写以下代码:

openssl rsa -text -in [File]
[File]是一个.pem文件,其中写入了加密的私钥。 然后cmd要求我提供密码短语。 键入密码短语后,我得到另一个.pem文件,其中包含以下内容:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBA...
sy+CJEnLX...
lbp4Uji0F...
...
-----END RSA PRIVATE KEY-----
这个私钥和证书我需要发送数据到服务器

现在,我想将数据从android设备发送到此服务器。 证书、密钥和密码短语作为JSON从服务器的get请求中获取,如下所示:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIE6zAd...
cRlpnCaW...
VF73XRYo...
...
-----END ENCRYPTED PRIVATE KEY-----
{
  "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);
我认为这是有效的。 但是现在我想从字符串创建/生成密钥。我已经试过了。但有一个错误:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000b9:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
所以我在谷歌上搜索并找到了。问题是,android studio不知道
DataTypeConverter
,我在没有任何帮助的情况下尝试了它
-----开始加密私钥------
-----结束加密私钥------
。什么都没用

如果可能的话,我希望不导入其他库就这样做

最后,我只想在android上做些什么,我可以用cmd做些什么

openssl rsa -text -in [File]
有什么想法吗?需要更多关于我问题的信息吗


谢谢你的帮助。

非常感谢你的帮助。我必须修改一些行,但它看起来很有效。我分享我的解决方案,当我确信它最终有效时。