Я только начал разрабатывать Android-приложение, которое должно взаимодействовать с сервером / базой данных. На стороне сервера я использую PHP для сбора данных или выполнения запросов. Я много читал о безопасности (XSS, SQL-инъекции и т. Д.). Поскольку я также хотел бы зашифровать данные, передаваемые между клиентом и сервером, я начал работать с openssl-функциями в PHP.
Функции openssl_seal- и openssl_open кажутся подходящими для этой цели.
Я написал эти две функции:
function encryptRnd($data) {
$pubKey = file_get_contents("public.key");
$publicKeys = array(openssl_pkey_get_public($pubKey));
$res = openssl_seal($data, $encryptedData, $encryptedKeys, $publicKeys);
return array("data" => base64_encode($encryptedData), "rndKey" => base64_encode($encryptedKeys[0]));}
function decryptRnd($credentials) {
$privateKey = openssl_get_privatekey(file_get_contents("private.key"));
$result = openssl_open(base64_decode($credentials["data"]), $decryptedData, base64_decode($credentials["rndKey"]), $privateKey);
if (!$result) echo "ERROR during decryption.\n";
return $decryptedData;}
«a» - это данные (для шифрования / шифрования), а «b» - это случайный ключ, созданный openssl_seal и используемый для расшифровки.
Два ключевых файла были созданы в Windows с использованием
- "openssl.exe genrsa -out private.key 1024" для файла privateKey
- "openssl.exe rsa -in private.key -out public.pem -outform PEM -pubout" для файла publicKey
В PHP все это работает как положено.
Но как реализовать ту же технику в Android (а я новичок!)?
Я искал в Интернете примеры для использования вместе с openssl_seal на стороне PHP, но не нашел ничего работающего.
- Я бы хотел иметь возможность шифровать данные на стороне Android и расшифровывать
это на PHP.
- И когда сервер отправляет зашифрованные данные, они должны быть расшифрованы на стороне Android (я полагаю, со второй парой public / privateKey)
Я также реализовал пример, упомянутый здесь , но это не сработало (openssl_private_decrypt всегда был FALSE на стороне PHP). Так что это мне не помогло, тогда как шифрование Android => PHP было бы без обратного.
В итоге: я ищу способ шифрования и дешифрования данных, передаваемых между Android и PHP на каждой стороне, где только получатель может расшифровать данные. Кто-нибудь может дать мне пример или даже подсказку?