繁体   English   中英

在移动客户端和服务器PHP之间使用公钥/私钥进行加密

[英]Encryption using public/private keys between mobile client and server PHP

情况1:从客户端到服务器的加密数据

需要在服务器中创建一个公钥/私钥。提供给客户端的公钥。客户端使用公钥对其进行加密。服务器使用生成的私钥对其进行解密。

情况2:但是,当服务器中的数据发送到客户端时,情况又如何呢?

该数据也应该被加密。是否为案例1的工作创建了相同的公共/私人或新密钥?有人可以为我的要求解释案例2。

提前致谢。

如本白皮书中有关安全数据加密及其支持材料所述:

  1. 使用HTTPS。
  2. 对于第二层身份验证加密,请使用带有固定公钥的libsodium (现代的跨平台加密库)。

PHP示例

密钥生成

$bob_box_kp = \Sodium\crypto_box_keypair();
$bob_box_secretkey = \Sodium\crypto_box_secretkey($bob_box_kp);
$bob_box_publickey = \Sodium\crypto_box_publickey($bob_box_kp);

加密

$anonymous_message_to_bob = \Sodium\crypto_box_seal(
    $message,
    $bob_box_publickey
);

解密

$decrypted_message = \Sodium\crypto_box_seal_open(
    $anonymous_message_to_bob,
    $bob_box_kp
);
if ($decrypted_message === false) {
    // You have the wrong keypair or the message was tampered with.
}

Android示例(使用Libstodium

密钥生成

byte[] secret_key = new byte[Box.SECRETKEYBYTES];
byte[] public_key = new byte[Box.PUBLICKEYBYTES];
Box.keypair(public_key, secret_key);

加密

Box.seal(
    ciphertextByteArray, // Output goes here
    plaintextByteArray,  // Your message
    public_key
);

解密

Box.sealOpen(
    plaintextOutputByteArray, // Decrypted data goes here
    ciphertextByteArray,      // Encrypted message received over the wire
    public_key,
    secret_key
);

您可以在任何方向上使用公钥/私钥加密。

因此,您的客户端可以使用公钥加密,然后服务器可以使用私钥解密。 如果您的服务器使用私钥加密,则客户端可以使用公钥解密。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM