我刚开始开发一个需要与服务器/数据库通信的 android-app。在服务器端,我使用 PHP 来收集数据或执行查询。我阅读了很多关于安全性(XSS、SQL 注入等)的内容。因为我还想加密客户端和服务器之间发送的数据,所以我开始在 PHP 中处理 openssl 函数。
openssl_seal- 和 openssl_open-functions 似乎很适合这个目的。我写了这两个函数:
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 上使用
- privateKey 文件的“openssl.exe genrsa -out private.key 1024”
- 公开密钥文件的“openssl.exe rsa -in private.key -out public.pem -outform PEM -pubout”
在 PHP 中,这一切都按预期工作。
但是如何在 Android 中实现相同的技术(我是初学者!)?
我在网上搜索了与 PHP 端的 openssl_seal 结合使用的示例,但没有发现任何工作。
- 我希望能够在 Android 端加密数据并在 PHP 上解密。
- 当服务器发送加密数据时,这将在 Android 端解密(我假设使用第二个公钥/私钥对)
我还实现了此处提到的示例,但这不起作用(openssl_private_decrypt 在 PHP 端始终为 FALSE)。所以这对我没有帮助,而它只是 Android=>PHP 加密而没有相反的方式。
总而言之:我正在寻找一种方法来加密和解密在 Android 和 PHP 之间发送的每一端数据,只有接收方可以解密数据。有人可以给我一个例子甚至一个线索吗?