【发布时间】:2017-02-19 06:45:44
【问题描述】:
我正在尝试使用从我的 php 服务器获取的公钥在 Android 应用程序中加密一个字符串。
php服务器代码:
$res = openssl_pkey_new();
openssl_pkey_export($res, $privKey);
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo $pubKey;
服务器正确创建密钥。在我的应用程序中,我将公钥存储在“响应”变量中。这个变量就像: response = "-----BEGIN PUBLIC KEY-----MIIB... etc ...wIDAQAB-----END PUBLIC KEY-----"
安卓代码:
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: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
我不知道为什么代码没有加密密码。任何想法?它是关于编码类型的吗? 谢谢。
【问题讨论】:
-
确保键没有尾随或前导空格。
-
不,这不是问题所在。我查过了。
标签: java php android public-key-encryption