来源:https://zhuanlan.zhihu.com/p/146986309
AES对称加密算法
PHP 的 OpenSSL 扩展已经实现了 AES 加密算法,我们可以通过 OpenSSL 扩展提供的方法实现对数据的加密和解密, PHP 在 7.2 版本已经完全移除了 MCrypt 加密,PHP 手册在 7.1 迁移页面给出了替代方案,就是用 OpenSSL 取代 MCrypt
class AES
{
//设置AES秘钥
private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥
/**
* 加密
* @param string $str 要加密的数据
* @return bool|string 加密后的数据
*/
static public function encrypt($str) {
$data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
$data = base64_encode($data);
return $data;
}
/**
* 解密
* @param string $str 要解密的数据
* @return string 解密后的数据
*/
static public function decrypt($str) {
$decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA);
return $decrypted;
}
}RSA非对称加密算法
生成私钥和公钥
生成私钥文件:
openssl genrsa -out rsa_private_key.pem 1024利用私钥,生成公钥:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem通过生成的公钥和私钥就可以对数据进行加解密
PHP RSA 实现(公钥加密私钥解密)
class RSA
{
/**
* @param string $str 要加密的数据
* @param string $public_key 公钥
* @return string
*/
static public function encrypt($str, $public_key) {
$encrypted = '';
$pu_key = openssl_pkey_get_public($public_key);
openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密
$encrypted = base64_encode($encrypted);
return $encrypted;
}
/**
* 解密
* @param string $str 要解密的数据
* @param string $private_key 私钥
* @return string
*/
static public function decrypt($str, $private_key) {
$decrypted = '';
$pi_key = openssl_pkey_get_private($private_key);
openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密
return $decrypted;
}
}PHP RSA 实现(私钥加密公钥解密)
class RSA
{
static public function encrypt($str, private_key) {
$encrypted = '';
$pi_key = openssl_pkey_get_private($private_key);
openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密
$encrypted = base64_encode($encrypted);
return $encrypted;
}
static public function decrypt($str, $public_key) {
$decrypted = '';
$pu_key = openssl_pkey_get_public($public_key);
openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密
return $decrypted;
}
}