Я пытаюсь записать строку в приложении Android с открытым ключом, который я получаю от моего php-сервера.
код php сервера:
$res = openssl_pkey_new();
openssl_pkey_export($res, $privKey);
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
echo $pubKey;
Сервер правильно создает ключ. В моем приложении я храню открытый ключ в переменной «response». Эта переменная похожа на:
response = «—— НАЧАТЬ ПУБЛИЧНЫЙ КЛЮЧ —— 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: неправильный тег
Я не знаю, почему код не содержит пароль. Любая идея? Это про тип кодирования?
Благодарю.
Задача ещё не решена.
Других решений пока нет …