首先我们需要使用 http://blog.he29.com/?p=484 生成 公钥和私钥;
然后放进自己的项目,下面是具体代码:
我们载入私钥和公钥,然后判断是否可以使用.
1 2 3 4 5 |
$path = $_SERVER['DOCUMENT_ROOT'].'/common/extend/Rsa/'; $private_key = file_get_contents($path.'s.txt');//私钥 $public_key = file_get_contents($path.'g.txt');//公钥 $pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的 $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的 |
接下来,我们准备原始数据,开始操作加密解密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$data = "天明宝宝";//原始数据 $encrypted = ""; $decrypted = ""; echo "下面使用私钥进行加密:\n"; echo "<br/>"; echo "原始数据=>", $data, "\n"; echo "<br/>"; openssl_private_encrypt($data, $encrypted, $pi_key);//私钥加密 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 echo "加密后的数据:=>". $encrypted, "\n"; echo "<br/>"; echo "解密现在的数据为:\n"; openssl_public_decrypt(base64_decode($encrypted), $decrypted, $pu_key);//私钥加密的内容通过公钥可用解密出来 echo $decrypted, "\n"; echo "<br/>"; echo "---------------------------------------\n"; echo "<br/>"; echo "下面使用公钥进行加密:\n"; echo "<br/>"; openssl_public_encrypt($data, $encrypted, $pu_key);//公钥加密 $encrypted = base64_encode($encrypted); echo "加密后的数据:=>".$encrypted, "\n"; echo "<br/>"; echo "使用私钥进行解密:\n"; openssl_private_decrypt(base64_decode($encrypted), $decrypted, $pi_key);//私钥解密 echo $decrypted, "\n"; |
结果如图:
整理成一个类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
<?php namespace common\extend; class Rsa{ public $private_key;//私钥 public $public_key;//公钥 public function __construct(){ $path = $_SERVER['DOCUMENT_ROOT'].'/common/extend/Rsa/'; $private_key = file_get_contents($path.'s.txt'); $public_key = file_get_contents($path.'g.txt'); $pi_key = openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的 $pu_key = openssl_pkey_get_public($public_key);//这个函数可用来判断公钥是否是可用的 if($pi_key && $pu_key){ $this->private_key = $pi_key; $this->public_key = $pu_key; }else{ return '公钥或者私钥不可用,请检查'; } } /** * @param $data 公钥加密 * @return string 传入需要加密的字符串 */ public function public_encode($data){ $encrypted = ""; openssl_public_encrypt($data, $encrypted, $this->public_key);//公钥加密 $encrypted = base64_encode($encrypted); return $encrypted; } /** * @param $encrypted 使用私钥解密 * @return string 传入被加密的base64字符串 */ public function private_decode($encrypted){ $decrypted = ""; openssl_private_decrypt(base64_decode($encrypted), $decrypted, $this->private_key);//私钥加密的内容通过公钥可用解密出来 return $decrypted; } /** * @param $data 私钥加密 * @return string 传入数据 */ public function private_encode($data){ $encrypted = ''; openssl_private_encrypt($data, $encrypted, $this->private_key);//私钥加密 $encrypted = base64_encode($encrypted);//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的 return $encrypted; } /** * @param $encrypted 公钥解密 * @return mixed 传入被加密的字符串 */ public function public_decode($encrypted){ $decrypted = ''; openssl_public_decrypt(base64_decode($encrypted), $decrypted, $this->public_key);//私钥加密的内容通过公钥可用解密出来 return $decrypted; } } |
构造函数里的判断 用异常机制可能更好一些
try cache 么