Android:PHP服务器中使用公共密钥的密码



我正在尝试使用我从php服务器中获得的公共密钥在Android应用中启用字符串。

PHP服务器代码:

$res = openssl_pkey_new();
openssl_pkey_export($res, $privKey);
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo $pubKey;

服务器正确创建密钥。在我的应用中,我将公共密钥存储在"响应"变量中。这个var就像:响应=" -----开始公共密钥------ miib ...等... widaqab -----结束公共密钥------"

Android代码:

String pass = "password";
String strEncryInfoData="";
try {
     KeyFactory keyFac = KeyFactory.getInstance("RSA");
     KeySpec keySpec = new X509EncodedKeySpec(Base64.decode(response.trim().getBytes(), Base64.DEFAULT));
     Key publicKey = keyFac.generatePublic(keySpec);
     cipher = Cipher.getInstance("RSA");
     cipher.init(Cipher.ENCRYPT_MODE, publicKey);
     byte[] cipherText = cipher.doFinal(pass.getBytes());
     strEncryInfoData = new String(Base64.encode(cipherText,Base64.DEFAULT));
} catch (Exception e){
}

运行应用程序时,显示此错误:java.security.spec.invalidkeyspecexception:java.lang.runtimeException:错误:0d0680a8:asn1编码例程:asn1_check_tlen:错误tag

>

我不知道为什么代码不列出密码。任何想法?它是关于编码类型的?谢谢。

尝试删除"启动标题"one_answers"端页脚"以及所有新线,然后您将获得需要解码并传递到X509EncodedKeySpec构造函数的base64编码der。这是一些代码:

response = response.replaceAll("(-+BEGIN PUBLIC KEY-+\r?\n|-+END PUBLIC KEY-+\r?\n?)", "");
response = response.replace("n", "").replace("r", "");
// Use Base64.NO_WRAP because: https://stackoverflow.com/questions/32935783/java-different-results-when-decoding-base64-string-with-java-util-base64-vs-and/32935972
byte[] responseBytes = Base64.decode(response, Base64.NO_WRAP);
KeySpec keySpec = new X509EncodedKeySpec(responseBytes);

最新更新