• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
成哥337 显示全部楼层 发表于 2021-10-25 19:44:40 |阅读模式 打印 上一主题 下一主题
如下所示:
  1. <?php
  2. namespace helpers;
  3. class OpensslRSA{
  4. //echo $private_key 私钥;
  5. public $private_key = '-----BEGIN RSA PRIVATE KEY-----
  6. MIICXQIBAAKBgQC+L7ENzBHxKOqjuFHPFKlAt40BatVZhUAHw/G05XshpTGqm9Rv
  7. 8wG0EAbFbdo9PuB8DiXdPQLyIfaqkTgpsPjJ1Ow7WKxmYbqZN5IW/GN+TyFWP+MB
  8. 2W6IBLPWBDvAl2NJlmU8j3LCPJW1dH4zP1OitkxZMyUuUYYfPuOtO9RJ2wIDAQAB
  9. AoGAUFCbmJQBT7JTxGfmRGkZQLdC2MJg7rkS3TSmMhpm8UJtwvqjr9MTeRL7iQxn
  10. CU4wRrNC0jcds1sca9N/wDt4FCkCala+bg7mwQuPpg5QhXelfFr88ibRnP8y8LmZ
  11. 7PPNqx9c4jivhMzJrzNh3luqg6awjsig2w3+EW1/Ubb30AECQQDshTvyc5mpDgiO
  12. 4g8q1ztszszL9eCp+IjlUaN51vC3Nj1eXpjbtdSZ0JVKrDdhKcd3rEZVYzMQN/lI
  13. pyq85e/bAkEAzdmN6TF3Y1h3LouumCy6+61ChTFrl/yjw13CGApmAQHhEVyANHr7
  14. NjoxP06eimzn7KHff/eYxd1Emf1SYA8uAQJBAN1ibFUpLRgXAZ20LNw9r+rNutXi
  15. ZJLUBlcXTjv6G0ByLYkKZGuqy7/ZhBPsFL4GnCUBBKhh/ObebaA6kH9VfmcCQGfg
  16. 0WxMOiM4EWy7sG+6ouE+ncL5HYKlSz7boYbgOHlpqVpJg6j4Jq1G0HNSCU9xhdg0
  17. F8VL/RxcfLH41AkFoAECQQCR8NDB3BgHqyJfarKKMWQ3qrXHaLfBKExMrpQ8MDzs
  18. MlSBzFOnucufo110lSgjdRlgr8smtU2hx9gXFIqxvfWF
  19. -----END RSA PRIVATE KEY-----';
  20. //公钥
  21. public $public_key = '-----BEGIN PUBLIC KEY-----
  22. MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+L7ENzBHxKOqjuFHPFKlAt40B
  23. atVZhUAHw/G05XshpTGqm9Rv8wG0EAbFbdo9PuB8DiXdPQLyIfaqkTgpsPjJ1Ow7
  24. WKxmYbqZN5IW/GN+TyFWP+MB2W6IBLPWBDvAl2NJlmU8j3LCPJW1dH4zP1OitkxZ
  25. MyUuUYYfPuOtO9RJ2wIDAQAB
  26. -----END PUBLIC KEY-----';
复制代码
  1. public $pi_key;
  2. public $pu_key;
  3. //判断公钥和私钥是否可用
  4. public function __construct()
  5. {
  6.   $this->pi_key = openssl_pkey_get_private($this->private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
  7.   $this->pu_key = openssl_pkey_get_public($this->public_key);//这个函数可用来判断公钥是否是可用的
  8.   // print_r($this->pi_key);echo "\n";
  9.   // print_r($this->pu_key);echo "\n";
  10. }
  11. //私钥加密
  12. /*public function PrivateEncrypt($data){
  13.   openssl_private_encrypt($data,$encrypted,$this->pi_key);
  14.   $encrypted = $this->urlsafe_b64encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
  15.   return $encrypted;
  16. }*/
  17. public function PrivateEncrypt($data){
  18.   // openssl_private_encrypt($data,$encrypted,$this->pi_key);
  19.   $crypto = '';
  20.   foreach (str_split($data, 117) as $chunk) {
  21.    openssl_private_encrypt($chunk, $encryptData, $this->pi_key);
  22.    $crypto .= $encryptData;
  23.   }
  24.   $encrypted = $this->urlsafe_b64encode($crypto);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
  25.   return $encrypted;
  26. }
复制代码
  1. //加密码时把特殊符号替换成URL可以带的内容
  2. function urlsafe_b64encode($string) {
  3.   $data = base64_encode($string);
  4.   $data = str_replace(array('+','/','='),array('-','_',''),$data);
  5.   return $data;
  6. }
  7. //解密码时把转换后的符号替换特殊符号
  8. function urlsafe_b64decode($string) {
  9.   $data = str_replace(array('-','_'),array('+','/'),$string);
  10.   $mod4 = strlen($data) % 4;
  11.   if ($mod4) {
  12.    $data .= substr('====', $mod4);
  13.   }
  14.   return base64_decode($data);
  15. }
  16. //私钥加密的内容通过公钥可用解密出来
  17. public function PublicDecrypt($encrypted){
  18.   // $encrypted = $this->urlsafe_b64decode($encrypted);
  19.   $crypto = '';
  20.   foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {
  21.    openssl_public_decrypt($chunk, $decryptData, $this->pu_key);
  22.    $crypto .= $decryptData;
  23.   }
  24.   //openssl_public_decrypt($encrypted,$decrypted,$this->pu_key);//私钥加密的内容通过公钥可用解密出来
  25.   return $crypto;
  26. }
  27. //公钥加密
  28. public function PublicEncrypt($data){
  29.   //openssl_public_encrypt($data,$encrypted,$this->pu_key);//公钥加密
  30.   $crypto = '';
  31.   foreach (str_split($data, 117) as $chunk) {
  32.    openssl_public_encrypt($chunk, $encryptData, $this->pu_key);
  33.    $crypto .= $encryptData;
  34.   }
  35.   $encrypted = $this->urlsafe_b64encode($crypto);
  36.   return $encrypted;
  37. }
  38. //私钥解密
  39. public function PrivateDecrypt($encrypted)
  40. {
  41.   $crypto = '';
  42.   foreach (str_split($this->urlsafe_b64decode($encrypted), 128) as $chunk) {
  43.    openssl_private_decrypt($chunk, $decryptData, $this->pi_key);
  44.    $crypto .= $decryptData;
  45.   }
  46.   //$encrypted = $this->urlsafe_b64decode($encrypted);
  47.   //openssl_private_decrypt($encrypted,$decrypted,$this->pi_key);
  48.   return $crypto;
  49. }
  50. }
复制代码
不消我多写什么了吧,有题目可以直接联系我。
以上这篇基于PHP RSA密文过长加密解密 越过1024的办理方法就是小编分享给各人的全部内容了,盼望能给各人一个参考,也盼望各人多多支持草根技能分享。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作