// 数据加密,使用公钥加密数据
function public_key_encrypt($str)
{
$rsa_pub = file_get_contents(ROOT_PATH . 'data/rsa/public_key.pem');
$encrypted = '';
$pub_id = openssl_get_publickey($rsa_pub);
$key_len = openssl_pkey_get_details($pub_id)['bits'];
$part_len = $key_len / 8 - 11;
$parts = str_split($str, $part_len);
foreach ($parts as $part) {
$encrypted_temp = '';
openssl_public_encrypt($part, $encrypted_temp, $rsa_pub);
$encrypted .= $encrypted_temp;
}
return base64_encode($encrypted);
}
// 数据加密,使用私钥加密数据
function private_key_encrypt($str)
{
$rsa_pri = file_get_contents(ROOT_PATH . 'data/rsa/private_key.pem');
$encrypted = '';
$pri_id = openssl_get_privatekey($rsa_pri);
$key_len = openssl_pkey_get_details($pri_id)['bits'];
$part_len = $key_len / 8 - 11;
$parts = str_split($str, $part_len);
foreach ($parts as $part) {
$encrypted_temp = '';
openssl_private_encrypt($part, $encrypted_temp, $rsa_pri);
$encrypted .= $encrypted_temp;
}
return base64_encode($encrypted);
}
// 公钥解密
function public_key_decrypt($str)
{
$rsa_pub = file_get_contents(ROOT_PATH . 'data/rsa/public_key.pem');
$str = str_replace(' ', '+', $str);
// openssl_private_decrypt(base64_decode($str), $data, $rsa_pr);
$decrypted = "";
$pub_id = openssl_get_publickey($rsa_pub);
$key_len = openssl_pkey_get_details($pub_id)['bits'];
$part_len = $key_len / 8;
$base64_decoded = base64_decode($str);
$parts = str_split($base64_decoded, $part_len);
foreach ($parts as $part) {
$decrypted_temp = '';
openssl_public_decrypt($part, $decrypted_temp, $rsa_pub);
$decrypted .= $decrypted_temp;
}
return $decrypted;
}
// 私钥解密
function private_key_decrypt($str)
{
$rsa_pri = file_get_contents(ROOT_PATH . 'data/rsa/private_key.pem');
$str = str_replace(' ', '+', $str);
// openssl_private_decrypt(base64_decode($str), $data, $rsa_pr);
$decrypted = "";
$pri_id = openssl_get_privatekey($rsa_pri);
$key_len = openssl_pkey_get_details($pri_id)['bits'];
$part_len = $key_len / 8;
$base64_decoded = base64_decode($str);
$parts = str_split($base64_decoded, $part_len);
foreach ($parts as $part) {
$decrypted_temp = '';
openssl_private_decrypt($part, $decrypted_temp, $rsa_pri);
$decrypted .= $decrypted_temp;
}
return $decrypted;
}