首页 > 语言 > PHP > 正文

基于PHP RSA密文过长加密解密 越过1024的解决方法

2024-05-05 00:02:47
字体:
来源:转载
供稿:网友

如下所示:

<?phpnamespace helpers;class OpensslRSA{ //echo $private_key 私钥; public $private_key = '-----BEGIN RSA PRIVATE KEY-----MIICXQIBAAKBgQC+L7ENzBHxKOqjuFHPFKlAt40BatVZhUAHw/G05XshpTGqm9Rv8wG0EAbFbdo9PuB8DiXdPQLyIfaqkTgpsPjJ1Ow7WKxmYbqZN5IW/GN+TyFWP+MB2W6IBLPWBDvAl2NJlmU8j3LCPJW1dH4zP1OitkxZMyUuUYYfPuOtO9RJ2wIDAQABAoGAUFCbmJQBT7JTxGfmRGkZQLdC2MJg7rkS3TSmMhpm8UJtwvqjr9MTeRL7iQxnCU4wRrNC0jcds1sca9N/wDt4FCkCala+bg7mwQuPpg5QhXelfFr88ibRnP8y8LmZ7PPNqx9c4jivhMzJrzNh3luqg6awjsig2w3+EW1/Ubb30AECQQDshTvyc5mpDgiO4g8q1ztszszL9eCp+IjlUaN51vC3Nj1eXpjbtdSZ0JVKrDdhKcd3rEZVYzMQN/lIpyq85e/bAkEAzdmN6TF3Y1h3LouumCy6+61ChTFrl/yjw13CGApmAQHhEVyANHr7NjoxP06eimzn7KHff/eYxd1Emf1SYA8uAQJBAN1ibFUpLRgXAZ20LNw9r+rNutXiZJLUBlcXTjv6G0ByLYkKZGuqy7/ZhBPsFL4GnCUBBKhh/ObebaA6kH9VfmcCQGfg0WxMOiM4EWy7sG+6ouE+ncL5HYKlSz7boYbgOHlpqVpJg6j4Jq1G0HNSCU9xhdg0F8VL/RxcfLH41AkFoAECQQCR8NDB3BgHqyJfarKKMWQ3qrXHaLfBKExMrpQ8MDzsMlSBzFOnucufo110lSgjdRlgr8smtU2hx9gXFIqxvfWF-----END RSA PRIVATE KEY-----'; //公钥 public $public_key = '-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+L7ENzBHxKOqjuFHPFKlAt40BatVZhUAHw/G05XshpTGqm9Rv8wG0EAbFbdo9PuB8DiXdPQLyIfaqkTgpsPjJ1Ow7WKxmYbqZN5IW/GN+TyFWP+MB2W6IBLPWBDvAl2NJlmU8j3LCPJW1dH4zP1OitkxZMyUuUYYfPuOtO9RJ2wIDAQAB-----END PUBLIC KEY-----';
public $pi_key; public $pu_key; //判断公钥和私钥是否可用 public function __construct() {  $this->pi_key = openssl_pkey_get_private($this->private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id  $this->pu_key = openssl_pkey_get_public($this->public_key);//这个函数可用来判断公钥是否是可用的  // print_r($this->pi_key);echo "/n";  // print_r($this->pu_key);echo "/n"; } //私钥加密 /*public function PrivateEncrypt($data){  openssl_private_encrypt($data,$encrypted,$this->pi_key);  $encrypted = $this->urlsafe_b64encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的  return $encrypted; }*/ public function PrivateEncrypt($data){  // openssl_private_encrypt($data,$encrypted,$this->pi_key);  $crypto = '';  foreach (str_split($data, 117) as $chunk) {   openssl_private_encrypt($chunk, $encryptData, $this->pi_key);   $crypto .= $encryptData;  }  $encrypted = $this->urlsafe_b64encode($crypto);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的  return $encrypted; }
//加密码时把特殊符号替换成URL可以带的内容 function urlsafe_b64encode($string) {  $data = base64_encode($string);  $data = str_replace(array('+','/','='),array('-','_',''),$data);  return $data; } //解密码时把转换后的符号替换特殊符号 function urlsafe_b64decode($string) {  $data = str_replace(array('-','_'),array('+','/'),$string);  $mod4 = strlen($data) % 4;  if ($mod4) {   $data .= substr('====', $mod4);  }  return base64_decode($data); } //私钥加密的内容通过公钥可用解密出来 public function PublicDecrypt($encrypted){  // $encrypted = $this->urlsafe_b64decode($encrypted);  $crypto = '';  foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {   openssl_public_decrypt($chunk, $decryptData, $this->pu_key);   $crypto .= $decryptData;  }  //openssl_public_decrypt($encrypted,$decrypted,$this->pu_key);//私钥加密的内容通过公钥可用解密出来  return $crypto; } //公钥加密 public function PublicEncrypt($data){  //openssl_public_encrypt($data,$encrypted,$this->pu_key);//公钥加密  $crypto = '';  foreach (str_split($data, 117) as $chunk) {   openssl_public_encrypt($chunk, $encryptData, $this->pu_key);   $crypto .= $encryptData;  }  $encrypted = $this->urlsafe_b64encode($crypto);  return $encrypted; } //私钥解密 public function PrivateDecrypt($encrypted) {  $crypto = '';  foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {   openssl_private_decrypt($chunk, $decryptData, $this->pi_key);   $crypto .= $decryptData;  }  //$encrypted = $this->urlsafe_b64decode($encrypted);  //openssl_private_decrypt($encrypted,$decrypted,$this->pi_key);  return $crypto; }}

不用我多写什么了吧,有问题可以直接联系我。

以上这篇基于PHP RSA密文过长加密解密 越过1024的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持VeVb武林网。


注:相关教程知识阅读请移步到PHP教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选