Я использую PHPSecLib для шифрования моего текста с помощью RSA:
$rsa = new Crypt_RSA();
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
extract($rsa->createKey());
$rsa->loadKey($privatekey);
$ciphertext = $rsa->encrypt($plaintext);
$rsa->loadKey($publickey);
return base64_encode($ciphertext) . ":" . base64_encode($publickey);
Я получаю что-то вроде encryptedBased64: publicKeyBased64.
Кажется, что работает, и если я пытаюсь расшифровать с помощьютот же метод с PHP, он работает также. Но попытка расшифровать с помощью Java дает мне java.security.InvalidKeyException: неверный формат ключа. Это код:
public static String decrypt(byte[] msg, byte[] key)
throws Exception{
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(key);
PublicKey keys = keyFactory.generatePublic(publicKeySpec);
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding","BC");
cipher.init(Cipher.DECRYPT_MODE, keys);
return new String(cipher.doFinal(msg));
}
public static void main(String[] args) throws Exception{
String res = "encryptedBased64:publicKeyBased64";
decrypt(Base64.getDecoder().decode(res.split(":")[0]),Base64.getDecoder().decode(res.split(":")[1]));
}
Не могу понять, почему.