Phpseclib эквивалентен Java RSA Encryption

Я пытаюсь воспроизвести шифрование Java с помощью Cipher cipher = Cipher.getInstance("RSA"); с PHP и phpseclib.

Я пробовал это и многое другое, но, похоже, данные не зашифрованы правильно

$rsa = new Crypt_RSA();
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_OAEP);
$rsa->loadKey($pub_key);
$ciphertext = $rsa->encrypt($plaintext);

Я пробовал разные комбинации, как

$rsa->setMGFHash('sha512');
$rsa->setHash('sha512');
//$rsa->setMGFHash('sha256');
//$rsa->setHash('sha256');

безуспешно.

Я что-то пропустил?

2

Решение

Никогда не используйте неполные строки шифра, как эта:

Cipher cipher = Cipher.getInstance("RSA");

Это не определяет заполнение и, следовательно, зависит от того, какой заполнитель предпочитает поставщик безопасности по умолчанию. Это, вероятно, будет по умолчанию:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

Это будет совместимо с

$rsa = new Crypt_RSA();
$rsa->loadKey($pub_key);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);

Но вы больше не должны использовать отступы PKCS # 1 v1.5. Вы действительно должны использовать OAEP (имея в виду):

Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");

и эквивалент phpseclib должен быть

$rsa = new Crypt_RSA();
$rsa->loadKey($pub_ley);
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_OAEP);
$rsa->setHash('sha256');
$ciphertext = $rsa->encrypt($plaintext);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]