Php 与后端服务器安全通信

Php 与后端服务器安全通信,php,android,encryption,Php,Android,Encryption,我的应用程序中有Facebook和Google登录,我使用后端服务器存储有关用户的数据,如姓名和状态 我将令牌和一些信息一起发送,比如用户点,服务器使用令牌来识别用户,并且做得很好 在发布应用程序之前,我想对所有内容进行加密,我知道我可以使用SSL,但是我的提供商为SSL支持收取了很多费用 我的想法是对RSA密钥对进行加密,将私人密钥保存在安全的地方,并让公众参与apk 我可以很容易地在我的应用程序中使用rsa生成加密和解密,但我不是php方面的专家。我尝试了很多方法来解密服务器端的内容,但我不

我的应用程序中有Facebook和Google登录,我使用后端服务器存储有关用户的数据,如姓名和状态

我将令牌和一些信息一起发送,比如用户点,服务器使用令牌来识别用户,并且做得很好

在发布应用程序之前,我想对所有内容进行加密,我知道我可以使用SSL,但是我的提供商为SSL支持收取了很多费用

我的想法是对RSA密钥对进行加密,将私人密钥保存在安全的地方,并让公众参与apk

我可以很容易地在我的应用程序中使用rsa生成加密和解密,但我不是php方面的专家。我尝试了很多方法来解密服务器端的内容,但我不知道该怎么做

我有一个由android生成的密钥对,我使用

getPublic().getEncoded()
getPrivate().getEncoded()
如何在php中使用私钥对数据进行解密和加密


我知道这可能不是做事情的最佳方式,但我认为我不会有问题,目标受众离黑客真的很远。

因为您添加了标签PHP,我假设您运行了某种rest api,您正在从android应用程序调用它。现在您不需要在PHP中进行加密和解密。这些由您的web服务器处理。就ssl而言,看看哪一个是开源的。仅在web服务器上强制使用ssl是一种非常好的安全措施。

我想我已经实现了我的目标,登录由facebook和google通过https 100%处理,我只使用令牌来识别服务器中的用户并增加分数

1-令牌和分数被加密并发送到服务器
2-服务器使用私钥查找令牌,我使用https呼叫Facebook或Google以检索用户id并增加分数

请注意,我的服务器中存储的所有数据都是100%公开的,我不存储任何人的私人信息,我只是想保护令牌,如果有人获得令牌并开始拨打大量电话,可能会达到facebook的限制,即每个用户每小时200个电话,这使得我的应用程序无法运行

将来,当我开始从应用程序中获得收入时,我将升级到SSL

Android

String pubKeyPEM = "***";

public void something(){
  String sendToServer = Base64.encodeToString(RSAEncrypt("test"),0);
}

public byte[] RSAEncrypt(final String request) throws Exception {
    PublicKey publicKey = getPublicKey();
    cipher = Cipher.getInstance("RSA/None/PKCS1Padding");
    cipher.init(Cipher.ENCRYPT_MODE, publicKey);
    return cipher.doFinal(plain.getBytes());
}

public PublicKey getPublicKey() throws Exception {
    PublicKey publicKey;

    byte[] decoded = Base64.decode(pubKeyPEM, Base64.DEFAULT);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    publicKey = kf.generatePublic(new X509EncodedKeySpec(decoded));

    return publicKey;
}
PHP

$privkey = '-----BEGIN RSA PRIVATE KEY-----';

function decrypt($data){
 global $privkey;

    if (openssl_private_decrypt(base64_decode($data), $decrypted, $privkey))
        $data = $decrypted;
    else
        $data = '';

    return $data;
}
私钥将被移动到一个更安全的地方,但这正是我想要的


我的服务器也在检查令牌是否由我的应用程序id生成,因此,如果有人试图使用不同的令牌,它将显示不同的应用程序id。

什么是“我想加密所有内容”?传输中的数据、设备上的数据、服务器上的数据等等?传输中,这是为了避免令牌盗窃或分数操纵,我有一个带有令牌和分数的json数组,我希望能够保护传输中的数据,我可以在电话上加密,但无法在服务器上解密。正确答案是HTTPS。在续签证书或支付证书费用方面,存在一些麻烦,这就是安全性的代价。还可以使用pi证书来防止MITM攻击。安全性既不是免费的,也不是简单的,但你的用户应该得到它。从我阅读的内容来看,我认为我需要shell访问来安装它,我没有它,我可以在将来升级到更好的服务器,但现在我坚持使用基本的linuxhosting@TiagoOliveira选择是您的成本与用户的安全性。如果您不打算提供HTTPS安全性,请明确告知用户,他们的登录不安全,因为您负担不起。