Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > совместимость java RSA и php openssl


Автор: atlas 26.4.2010, 23:42
Здравствуйте!

Пытаюсь наладить работу клиент/серверного приложения

Есть клиент на java, который использует стандартные библиотеки для работы с RSA

Код

    PublicKey publicKey = ...
    Cipher c = Cipher.getInstance("RSA");
    c.init(Cipher.ENCRYPT_MODE, publicKey);
    byte[] encrypted = c.doFinal(message.getBytes());


и шлет эти шифрованные данные серверу, который должен расшифровать их:
Код

    $privateKey = openssl_pkey_get_private('file://'.$path_private, null);
    openssl_private_decrypt($encryptedData, $sensitiveData, $privateKey);
    echo $sensitiveData;


но вот проблема, с которой я возился несколько часов - в java значения байта: -128..127 , в php: 0..255, то есть эти массивы несовместимы

И вот вопрос - как же сделать эти данные корректными для обеих сторон?

пробовал прибавлять +128 к байтам в java , слать серверу - ничего..  smile 

есть идеи?

Автор: LSD 27.4.2010, 18:36
Цитата(atlas @  27.4.2010,  00:42 Найти цитируемый пост)
но вот проблема, с которой я возился несколько часов - в java значения байта: -128..127 , в php: 0..255, то есть эти массивы несовместимы

Не переживай, байты и в PHP и Java абсолютно одинаковые smile
Просто Java трактует байт как знаковый тип, а PHP как беззнаковый, но само значение от этого не меняется. Меняется только его отображение. 


P.S. В Java получить из байта его беззнаковое значение можно так:
Код

byte b = -1;
int i = 0xFF & b;

Автор: atlas 28.4.2010, 01:11
Огромное спасибо! Проблема-то пустяковая, а на её поиск потратил много времени.. Надо подучить основы smile

Автор: atlas 28.4.2010, 01:37
вопрос решён )

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)