>  기사  >  백엔드 개발  >  RSA 암호문의 암호화 및 복호화에 대한 자세한 설명

RSA 암호문의 암호화 및 복호화에 대한 자세한 설명

php中世界最好的语言
php中世界最好的语言원래의
2018-03-24 13:35:372084검색

이번에는 RSA 암호문의 암호화 및 복호화에 대한 자세한 설명을 가져왔습니다. RSA 암호문의 암호화 및 복호화에 대한 주의사항은 무엇인가요?

는 다음과 같습니다.

<?php
namespace helpers;
class OpensslRSA{
 //echo $private_key 私钥;
 public $private_key = &#39;-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQC+L7ENzBHxKOqjuFHPFKlAt40BatVZhUAHw/G05XshpTGqm9Rv
8wG0EAbFbdo9PuB8DiXdPQLyIfaqkTgpsPjJ1Ow7WKxmYbqZN5IW/GN+TyFWP+MB
2W6IBLPWBDvAl2NJlmU8j3LCPJW1dH4zP1OitkxZMyUuUYYfPuOtO9RJ2wIDAQAB
AoGAUFCbmJQBT7JTxGfmRGkZQLdC2MJg7rkS3TSmMhpm8UJtwvqjr9MTeRL7iQxn
CU4wRrNC0jcds1sca9N/wDt4FCkCala+bg7mwQuPpg5QhXelfFr88ibRnP8y8LmZ
7PPNqx9c4jivhMzJrzNh3luqg6awjsig2w3+EW1/Ubb30AECQQDshTvyc5mpDgiO
4g8q1ztszszL9eCp+IjlUaN51vC3Nj1eXpjbtdSZ0JVKrDdhKcd3rEZVYzMQN/lI
pyq85e/bAkEAzdmN6TF3Y1h3LouumCy6+61ChTFrl/yjw13CGApmAQHhEVyANHr7
NjoxP06eimzn7KHff/eYxd1Emf1SYA8uAQJBAN1ibFUpLRgXAZ20LNw9r+rNutXi
ZJLUBlcXTjv6G0ByLYkKZGuqy7/ZhBPsFL4GnCUBBKhh/ObebaA6kH9VfmcCQGfg
0WxMOiM4EWy7sG+6ouE+ncL5HYKlSz7boYbgOHlpqVpJg6j4Jq1G0HNSCU9xhdg0
F8VL/RxcfLH41AkFoAECQQCR8NDB3BgHqyJfarKKMWQ3qrXHaLfBKExMrpQ8MDzs
MlSBzFOnucufo110lSgjdRlgr8smtU2hx9gXFIqxvfWF
-----END RSA PRIVATE KEY-----&#39;;
 //公钥
 public $public_key = &#39;-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+L7ENzBHxKOqjuFHPFKlAt40B
atVZhUAHw/G05XshpTGqm9Rv8wG0EAbFbdo9PuB8DiXdPQLyIfaqkTgpsPjJ1Ow7
WKxmYbqZN5IW/GN+TyFWP+MB2W6IBLPWBDvAl2NJlmU8j3LCPJW1dH4zP1OitkxZ
MyUuUYYfPuOtO9RJ2wIDAQAB
-----END PUBLIC KEY-----&#39;;
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 중국어 웹사이트의 다른 관련 기사를 주목하세요!

추천 자료:

PHP 생성기를 사용하여

phpstudy2018

ThinkPHP는 WeChat 결제(jsapi 결제) 프로세스 튜토리얼을 구현합니다. 자세한 설명_php 예제

위 내용은 RSA 암호문의 암호화 및 복호화에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.