Blogger Information
Blog 142
fans 5
comment 0
visits 129516
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)
php开发大牛
Original
714 people have browsed it

RSA非对称加密算法,如果是公钥加密,就得用私钥解密,反过来也一样,私钥加密的就用公钥解密,以下是相关实现函数

/**
* RSA私钥加密
* @param string $private_key 私钥
* @param string $data 要加密的字符串
* @return string $encrypted 返回加密后的字符串
* @author mosishu
*/
function privateEncrypt($private_key,$data){
$encrypted = '';
$pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
//最大允许加密长度为117,得分段加密
$plainData = str_split($data, 100);//生成密钥位数 1024 bit key
foreach($plainData as $chunk){
 $partialEncrypted = '';
 $encryptionOk = openssl_private_encrypt($chunk,$partialEncrypted,$pi_key);//私钥加密
 if($encryptionOk === false){
  return false;
 }
 $encrypted .= $partialEncrypted;
}

$encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
return $encrypted;
}
/**
* RSA公钥解密(私钥加密的内容通过公钥可以解密出来)
* @param string $public_key 公钥
* @param string $data 私钥加密后的字符串
* @return string $decrypted 返回解密后的字符串
* @author mosishu
*/
function publicDecrypt($public_key,$data){
$decrypted = '';
$pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的
$plainData = str_split(base64_decode($data), 128);//生成密钥位数 1024 bit key
foreach($plainData as $chunk){
 $str = '';
 $decryptionOk = openssl_public_decrypt($chunk,$str,$pu_key);//公钥解密
 if($decryptionOk === false){
  return false;
 }
 $decrypted .= $str;
}
return $decrypted;
}
//RSA公钥加密
function publicEncrypt($public_key,$data){
$encrypted = '';
$pu_key = openssl_pkey_get_public($public_key);
$plainData = str_split($data, 100);
foreach($plainData as $chunk){
 $partialEncrypted = '';
 $encryptionOk = openssl_public_encrypt($chunk,$partialEncrypted,$pu_key);//公钥加密
 if($encryptionOk === false){
  return false;
 }
 $encrypted .= $partialEncrypted;
}
$encrypted = base64_encode($encrypted);
return $encrypted;
}
//RSA私钥解密
function privateDecrypt($private_key,$data){
$decrypted = '';
$pi_key = openssl_pkey_get_private($private_key);
$plainData = str_split(base64_decode($data), 128);
foreach($plainData as $chunk){
 $str = '';
 $decryptionOk = openssl_private_decrypt($chunk,$str,$pi_key);//私钥解密
 if($decryptionOk === false){
  return false;
 }
 $decrypted .= $str;
}
return $decrypted;
}


Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!