2013-07-05 2 views
0

Я пытаюсь зашифровать материал в Java с помощью открытого ключа, сгенерированного моей PHP:PHP и Java Decrpytion ошибка при использовании PhpSecLib и BouncyCastle

PHP код

$rsa = new Crypt_RSA(); 
    $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); 
    $rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1); 
    $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1); 


    $keys = $rsa->createKey(1024); 
    extract($keys); 

    echo (base64_encode($publickey)); 

Для целей тестирования, я отложите ключевую пару (base64) вышеуказанного формата.

Я извлекаю свой открытый ключ в java и base64, декодируя его.

String publicKeyDecoded = new String(Base64.decode(publicKey)); 
    PEMParser pr = new PEMParser(new StringReader(publicKeyDecoded)); 
    Object obj = pr.readObject(); 
    pr.close(); 
    SubjectPublicKeyInfo spki = (SubjectPublicKeyInfo) obj; 
    AsymmetricKeyParameter askp = PublicKeyFactory.createKey(spki); 

    AsymmetricBlockCipher e = new RSAEngine(); 
    e = new org.bouncycastle.crypto.encodings.PKCS1Encoding(e); 
    e.init(true, askp); 

    byte[] messageBytes = plainText.getBytes(); 
    byte[] encryptedData = e.processBlock(messageBytes, 0, messageBytes.length); 
    byte[] encryptedDataBase = Base64.encode(encryptedData); 

Я посылаю Base64 зашифрованного открытого текста обратно в PHP для дешифрования, используя следующие:

$rsa->loadKey($privatekey) or die ("Cant load"); 
    echo $rsa->decrypt($cipher);   

Это не может decrpyt мой закодированное сообщение и бросает мне ошибку:

Decryption error in <b>/opt/lampp/htdocs/Crypt/RSA.php</b> on line <b>2120</b> 

Can кто-то указал мне в правильном направлении? Прошло несколько часов с тех пор, как я пытался понять это.

Я использую жёстко прописанные ключи, так что я предполагаю, что нет никаких сомнений в моих ключах ошибиться ...

+0

Вы устанавливаете режим шифрования в PHP при создании ключа. Вы настраиваете его, когда расшифровываете зашифрованный текст? – neubert

ответ

1

Чтобы ответить на мой собственный вопрос:

Все, кроме от окончательной расшифровки PHP был правильным.

Оно должно быть:

$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1); 
    $rsa->setPrivateKeyFormat(CRYPT_RSA_PRIVATE_FORMAT_PKCS1); 
    $rsa->setPublicKeyFormat(CRYPT_RSA_PUBLIC_FORMAT_PKCS1); 

    $rsa->loadKey(base64_decode($_SESSION['private'])) or die ("Cant load"); 
    echo $rsa->decrypt(base64_decode($cipher)); 

Я забыл ун-base64 мой зашифрован текст, посланный от Явы и установить режимы шифрования.

Спасибо neubert.

+0

Это был единственный ответ, который помог после более чем трех дней проб и ошибок, спасибо @karthik! –

Смежные вопросы