Skip to content

Commit eed9b2e

Browse files
committed
1.0.0
1 parent 319f8e3 commit eed9b2e

File tree

8 files changed

+383
-1
lines changed

8 files changed

+383
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/vendor/

README.md

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,47 @@
11
# php-rsa
2-
php rsa加密解密
2+
3+
php rsa 加密解密类
4+
5+
使用示例 demo.php
6+
7+
```php
8+
<?php
9+
10+
require_once 'vendor/autoload.php';
11+
12+
$Rsa = new \niklaslu\Rsa();
13+
14+
$publicKey = $Rsa->getPublicKeyStr();
15+
echo $publicKey;
16+
echo "<br>";
17+
18+
$pravateKey = $Rsa->getPrivateKeyStr();
19+
20+
echo $pravateKey;
21+
echo "<br>";
22+
23+
$data = 'data1';
24+
25+
// 通过私钥加密
26+
$enc = $Rsa->encryptByPrivate($data);
27+
echo $enc;
28+
echo "<br>";
29+
30+
// 通过公钥解密
31+
$dec = $Rsa->decryptByPublic($enc);
32+
echo $dec;
33+
echo "<br>";
34+
35+
36+
$data = 'data2';
37+
38+
// 通过公钥加密
39+
$enc = $Rsa->encryptByPublic($data);
40+
echo $enc;
41+
echo "<br>";
42+
43+
// 通过私钥解密
44+
$dec = $Rsa->decryptByPrivate($enc);
45+
echo $dec;
46+
echo "<br>";
47+
```

composer.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "niklaslu/php-rsa",
3+
"description": "php rsa加密解密",
4+
"type": "php",
5+
"license": "MIT",
6+
"authors": [
7+
{
8+
"name": "niklaslu",
9+
"email": "332553882@qq.com"
10+
}
11+
],
12+
"version" : "1.0.0",
13+
"require": {},
14+
"autoload" : {
15+
"psr-4" : {
16+
"niklaslu\\" : "src"
17+
}
18+
},
19+
"repositories": {
20+
"packagist": {
21+
"type": "composer",
22+
"url": "https://packagist.phpcomposer.com"
23+
}
24+
}
25+
}

demo.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Rsa 加密解密示例
4+
* author :niklaslu <332553882@qq.com>
5+
*/
6+
7+
require_once 'vendor/autoload.php';
8+
9+
$Rsa = new \niklaslu\Rsa();
10+
11+
$publicKey = $Rsa->getPublicKeyStr();
12+
echo $publicKey;
13+
echo "<br>";
14+
15+
$pravateKey = $Rsa->getPrivateKeyStr();
16+
17+
echo $pravateKey;
18+
echo "<br>";
19+
20+
$data = 'data1';
21+
22+
// 通过私钥加密
23+
$enc = $Rsa->encryptByPrivate($data);
24+
echo $enc;
25+
echo "<br>";
26+
27+
// 通过公钥解密
28+
$dec = $Rsa->decryptByPublic($enc);
29+
echo $dec;
30+
echo "<br>";
31+
32+
33+
$data = 'data2';
34+
35+
// 通过公钥加密
36+
$enc = $Rsa->encryptByPublic($data);
37+
echo $enc;
38+
echo "<br>";
39+
40+
// 通过私钥解密
41+
$dec = $Rsa->decryptByPrivate($enc);
42+
echo $dec;
43+
echo "<br>";

src/Rsa.php

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
<?php
2+
namespace niklaslu;
3+
/**
4+
* Created by PhpStorm.
5+
* User: Administrator
6+
* Date: 2017/4/20
7+
* Time: 11:46
8+
*
9+
*
10+
* keyType file :文件 str:直接传递字符串
11+
*
12+
*
13+
*/
14+
class Rsa
15+
{
16+
// 私钥字符串
17+
protected $private_key_str = '';
18+
19+
// 公钥字符串
20+
protected $public_key_str = '';
21+
22+
// 私钥文件路径
23+
protected $private_key_path = '' ;
24+
25+
// 公钥文件路径
26+
protected $public_key_path = '';
27+
28+
protected $error = '';
29+
30+
protected $keyType = 'file';
31+
32+
public function __construct($config = null){
33+
34+
if (isset($config['type'])){
35+
$this->keyType = $config['type'] ? $config['type'] : $this->keyType;
36+
}
37+
38+
if ($this->keyType == 'file'){
39+
// 获取默认public key private key
40+
if (isset($config['public_key_path']) && isset($config['private_key_path'])){
41+
$this->public_key_path = $config['public_key_path'];
42+
$this->private_key_path = $config['private_key_path'];
43+
}else{
44+
$this->public_key_path = dirname(__FILE__) . '/key/rsa_public_key.pem';
45+
$this->private_key_path = dirname(__FILE__) . '/key/rsa_private_key.pem';
46+
}
47+
48+
if ($this->private_key_path){
49+
$this->private_key_str = $this->getKeyStr($this->private_key_path);
50+
}
51+
if ($this->public_key_path){
52+
$this->public_key_str = $this->getKeyStr($this->public_key_path);
53+
}
54+
}elseif ($this->keyType == 'str'){
55+
$this->private_key_str = isset($config['private_key_str']) ? $config['private_key_str'] : $this->private_key_str;
56+
$this->public_key_str = isset($config['public_key_str']) ? $config['public_key_str'] : $this->public_key_str;
57+
}
58+
59+
return $this;
60+
61+
}
62+
63+
public function setPublicKeyStr($publicKeyStr){
64+
65+
$this->public_key_str = $publicKeyStr;
66+
return $this;
67+
}
68+
69+
public function setPrivateKeyStr($privateKeyStr){
70+
71+
$this->private_key_str = $privateKeyStr;
72+
return $this;
73+
}
74+
75+
/**
76+
* 私钥加密
77+
* @param $data
78+
* @param string $encrypted
79+
* @return bool|string
80+
*/
81+
public function encryptByPrivate($data , $encrypted = ''){
82+
83+
$privateKey = $this->getPrivateKeyStr();
84+
85+
if (!$privateKey){
86+
return false;
87+
}
88+
89+
// data为数组的时候转成json
90+
if (!is_string($data)){
91+
$data = json_encode($data);
92+
}
93+
//私钥加密
94+
openssl_private_encrypt($data,$encrypted,$privateKey);
95+
96+
//加密后的内容通常含有特殊字符,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url安全的
97+
$encrypted = base64_encode($encrypted);
98+
99+
return $encrypted;
100+
101+
}
102+
103+
/**
104+
* 公钥解密
105+
* @param $data
106+
* @param string $decrypted
107+
* @return bool|string
108+
*/
109+
public function decryptByPublic($data , $decrypted = ''){
110+
111+
$publicKey = $this->getPublicKeyStr();
112+
if (!$publicKey){
113+
return false;
114+
}
115+
116+
$data = base64_decode($data);
117+
118+
//私钥加密的内容通过公钥可用解密出来
119+
openssl_public_decrypt($data ,$decrypted, $publicKey);
120+
121+
return $decrypted;
122+
123+
}
124+
125+
/**
126+
* 公钥加密
127+
* @param $data
128+
* @param string $encrypted
129+
* @return bool|string
130+
*/
131+
public function encryptByPublic($data , $encrypted = ''){
132+
133+
$publicKey = $this->getPublicKeyStr();
134+
if (!$publicKey){
135+
return false;
136+
}
137+
// data为数组的时候转成json
138+
if (!is_string($data)){
139+
$data = json_encode($data);
140+
}
141+
// 公钥加密
142+
openssl_public_encrypt($data , $encrypted , $publicKey);
143+
$encrypted = base64_encode($encrypted);
144+
145+
return $encrypted;
146+
147+
}
148+
149+
/**
150+
* 私钥解密
151+
* @param $data
152+
* @param string $decrypted
153+
* @return bool|string
154+
*/
155+
public function decryptByPrivate($data , $decrypted = ''){
156+
157+
$privateKey = $this->getPrivateKeyStr();
158+
159+
if (!$privateKey){
160+
return false;
161+
}
162+
163+
$data = base64_decode($data);
164+
165+
openssl_private_decrypt($data , $decrypted , $privateKey);
166+
167+
return $decrypted;
168+
169+
}
170+
171+
/**
172+
* 通过文件获取key
173+
* @param $filePath
174+
* @return string
175+
*/
176+
protected function getKeyStr($filePath){
177+
178+
$str = file_get_contents($filePath);
179+
180+
return $str;
181+
}
182+
183+
/**
184+
* 获取private key
185+
* @return string
186+
*/
187+
public function getPrivateKeyStr(){
188+
189+
if ($this->private_key_str){
190+
$key = openssl_pkey_get_private($this->private_key_str);
191+
if ($key){
192+
return $key;
193+
}else {
194+
$this->error = '私钥不可用';
195+
return false;
196+
}
197+
}else{
198+
$this->error = '私钥不存在';
199+
return false;
200+
}
201+
202+
}
203+
204+
/**
205+
* 获取public key
206+
* @return string
207+
*/
208+
public function getPublicKeyStr(){
209+
210+
if ($this->public_key_str){
211+
$key = openssl_pkey_get_public($this->public_key_str);
212+
if ($key){
213+
return $key;
214+
}else {
215+
$this->error = '公钥不可用';
216+
return false;
217+
}
218+
}else{
219+
$this->error = '公钥不存在';
220+
return false;
221+
}
222+
223+
}
224+
225+
public function getError(){
226+
227+
return $this->error;
228+
}
229+
230+
231+
}

src/key/private_key.pem

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMnPJ8QMQnL9vIkp
3+
ja2Ij9yGuiyvC09yS8c/dyqwnInHsQlwsyQ/H+zST6QWlbI6r42f7uuiyP1L8nnd
4+
yH8o0pI3mlL5PgTAWFwm1AygaGwn8BlIB7y0lOc0aaOZtA71NblankcvpY0Wpt4d
5+
JpABCAP2QFORKO8aGAIysaAn59kXAgMBAAECgYA0mQpbPXrAL8PI2Ay2Euaz6mVx
6+
qfm/riFz/+WWOcvC2UoaFMaMBuvSNIpPUReZCVSiC/Igdh/+bKH5A0XzZndi7+LH
7+
YLAzi7rjqSYX+Cu0QladDqxte+2r/QAB+VyVg2gl71m00OrMDDYP7v0de+Nq1Jhe
8+
8r0mZ7eWrB9CPahiKQJBAPJlGBnr79rTn5zN1UqX2mw2qZ9UBtwwvvRGWCMRuWfH
9+
r+gKo4Zly47DokIoyvSrzuQzDg4NFe0WykGb+SPf/CUCQQDVIuV7Z+ZYwA0BiZ+/
10+
oXjtsb3fvlWEDgLFnacEF4miRHTqMlapVGyU//4TmReZUXsEPtOmr/tVh+O7Vztc
11+
xt2LAkEAlWegimG1zrCAAjuQy1B8DhVHSfCV5eSZ3qD5NGx5VjFsCF9+WZmm9VE6
12+
UwMnzdWUSW36rMh+Ckvw0K3dy7IEjQJAJsTXO1BV7RTaCMqQ3Vmw1oO7RwSnJ4Mo
13+
6+tWYv8pEPQk1Cjd7KUnrx61h7kUOtZAazBGbY6bSB6UxRIEAUdHKwJBAKT1YPEd
14+
8Qm5dhCyI51V9sd87PNnkW+J8vZgt1p3/XyjYVnHKknuIV2cFxCPCslWSdL/EmhO
15+
H5WlZF50ubxS3P8=
16+
-----END PRIVATE KEY-----

src/key/rsa_private_key.pem

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN RSA PRIVATE KEY-----
2+
MIICXQIBAAKBgQDJzyfEDEJy/byJKY2tiI/chrosrwtPckvHP3cqsJyJx7EJcLMk
3+
Px/s0k+kFpWyOq+Nn+7rosj9S/J53ch/KNKSN5pS+T4EwFhcJtQMoGhsJ/AZSAe8
4+
tJTnNGmjmbQO9TW5Wp5HL6WNFqbeHSaQAQgD9kBTkSjvGhgCMrGgJ+fZFwIDAQAB
5+
AoGANJkKWz16wC/DyNgMthLms+plcan5v64hc//lljnLwtlKGhTGjAbr0jSKT1EX
6+
mQlUogvyIHYf/myh+QNF82Z3Yu/ix2CwM4u646kmF/grtEJWnQ6sbXvtq/0AAflc
7+
lYNoJe9ZtNDqzAw2D+79HXvjatSYXvK9Jme3lqwfQj2oYikCQQDyZRgZ6+/a05+c
8+
zdVKl9psNqmfVAbcML70RlgjEblnx6/oCqOGZcuOw6JCKMr0q87kMw4ODRXtFspB
9+
m/kj3/wlAkEA1SLle2fmWMANAYmfv6F47bG9375VhA4CxZ2nBBeJokR06jJWqVRs
10+
lP/+E5kXmVF7BD7Tpq/7VYfju1c7XMbdiwJBAJVnoIphtc6wgAI7kMtQfA4VR0nw
11+
leXkmd6g+TRseVYxbAhfflmZpvVROlMDJ83VlElt+qzIfgpL8NCt3cuyBI0CQCbE
12+
1ztQVe0U2gjKkN1ZsNaDu0cEpyeDKOvrVmL/KRD0JNQo3eylJ68etYe5FDrWQGsw
13+
Rm2Om0gelMUSBAFHRysCQQCk9WDxHfEJuXYQsiOdVfbHfOzzZ5FvifL2YLdad/18
14+
o2FZxypJ7iFdnBcQjwrJVknS/xJoTh+VpWRedLm8Utz/
15+
-----END RSA PRIVATE KEY-----

src/key/rsa_public_key.pem

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-----BEGIN PUBLIC KEY-----
2+
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJzyfEDEJy/byJKY2tiI/chros
3+
rwtPckvHP3cqsJyJx7EJcLMkPx/s0k+kFpWyOq+Nn+7rosj9S/J53ch/KNKSN5pS
4+
+T4EwFhcJtQMoGhsJ/AZSAe8tJTnNGmjmbQO9TW5Wp5HL6WNFqbeHSaQAQgD9kBT
5+
kSjvGhgCMrGgJ+fZFwIDAQAB
6+
-----END PUBLIC KEY-----

0 commit comments

Comments
 (0)