PHP服务端和客户端进行交互或者提供API时,如果涉及到敏感的信息需要加密这就需要rsa非对称加密了。
非对称加密需要两个秘钥,一个是公有秘钥和私有秘钥(public key private key),将公有秘钥公开,自己只保留私有秘钥,对方用公钥对信息进行加密发送,我们接受到加密的信息后用私钥进行解密。
这两个秘钥是成对出现的,是由系统生成。
在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
例:
class Rsa
{
public $privateKey = '';
public $publicKey = '';
public function __construct()
{
$resource = openssl_pkey_new();
openssl_pkey_export($resource, $this->privateKey);
$detail = openssl_pkey_get_details($resource);
$this->publicKey = $detail['key'];
}
public function publicEncrypt($data, $publicKey)
{
openssl_public_encrypt($data, $encrypted, $publicKey);
return $encrypted;
}
public function publicDecrypt($data, $publicKey)
{
openssl_public_decrypt($data, $decrypted, $publicKey);
return $decrypted;
}
public function privateEncrypt($data, $privateKey)
{
openssl_private_encrypt($data, $encrypted, $privateKey);
return $encrypted;
}
public function privateDecrypt($data, $privateKey)
{
openssl_private_decrypt($data, $decrypted, $privateKey);
return $decrypted;
}
}
加密完记得使用
base64_encode()处理,以免加密后出现乱码。同样要用base64_decode()解密
公钥加密的数据只有私钥能解密。
私钥加密的数据只有公钥能解密。