教程下载地址: 网赚博客http://www.piaodoo.com/创业项目排行榜前十名http://www.piaodoo.com/
第一步、生成公私钥
密钥长度:
- RSA 密钥通常有不同的长度,通常以位数来表示,如 1024 位、2048 位等。一般来说,密钥长度越长,加密强度越高,但同时也会增加加密和解密的计算复杂度。一般推荐使用 2048 位或更长的 RSA 密钥来确保较高的安全性。
密钥格式:
- OpenSSL 中的私钥通常采用 PEM 格式(Privacy-Enhanced Mail,即隐私增强邮件)存储。PEM 格式的密钥是经过 Base64 编码的文本字符串,通常以
-----BEGIN PRIVATE KEY-----
开头,以-----END PRIVATE KEY-----
结尾。 - 另外,私钥也可以存储在 PKCS#12 格式的证书文件中,通常以
.p12
或.pfx
结尾。这些文件通常包含私钥、公钥和证书链等信息。
第二步、三种方式读取RSA密钥
第1种:公私钥弄成一行,必须一行没有空格和换行
$publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKZ1mKTymRoGKnHiP1xAy4aiyt5r0BscCZnDAonCrMFZ4kBGriPNHxEaLr5lfBnMKw7k6i+2dsFPSEZooTvqtPUCAwEAAQ==';
$privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApnWYpPKZGgYqceI/XEDLhqLK3mvQGxwJmcMCicKswVniQEauI80fERouvmV8GcwrDuTqL7Z2wU9IRmihO+q09QIDAQABAkBunx3nGHXYjppsfn++7iyTd+I7+Agfy/0xWyB3rpEiGGgfemjcRFaeq5SC2vUNXsrEOY5gbUSQmFxH//Cym18NAiEA1z1cZx/Q9cbIjFPwp1a+K5CVFDXDcfbi/AQgAkVs0/cCIQDF+2fr23AoBslcOC4S0yAx94AbgxCntYuRqztxybsrcwIgMW86ZcT87TX2oaQ1xXk6vC68zqN6fBZEE7Wu1Fa1pAkCIElmOJP3qfAc/AAlj+dIwLHlqWgJwl3674CU9Bfui2bDAiEA0CKJpF8x7KANCcopEQC93PsbIztuML322LOfDV1Lw/k=';
转化能使用的密钥资源
- 如果私钥不是资源类型,则将私钥进行处理,将其转换为 PEM 格式。这里使用
chunk_split
函数将私钥按照每行64个字符的长度进行分割,并在适当的位置插入换行符\n
。 - 在拼接完整的 PEM 格式私钥之后,再使用
openssl_pkey_get_private
函数将 PEM 格式的私钥转换为 OpenSSL 的私钥资源
$pem = chunk_split($privateKey, 64, "\n");
$pem = "-----BEGIN PRIVATE KEY-----\n" . $pem. "-----END PRIVATE KEY-----\n";
p
e
m
2
=
c
h
u
n
k
s
p
l
i
t
(
pem2 = chunk_split(
pem2=chunksplit(publicKey, 64, “\n”);
$pem2 = “-----BEGIN PUBLIC KEY-----\n” . $pem2 . “-----END PUBLIC KEY-----\n”;
第2种:直接复制生成公私钥
$publicKeyString = "-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1ffL+kUEedBLTzQrKU+
8oq9IZSUroxhmnWrXa1XMGtlbeVCHQNljujqwGuLELyk7i78cGczwCyGE2SVj9oI
tBzGn02fWZNCb3bHPv6ofliTvqYcZOFaFTWB+tTKuOmopCk/bgQVe7HC6+74s/3x
Q4tM1jVbNPYSY11++DLjEQ8KaA3pNJwoFTxER3GVEgmfhi5xUTTaBa5ZOIaNfsFr
0fGzvGbmRpqoIor6MlSxXbMO4k2pMzB7YJYYr7zRC28DoeJCj5XnXkq4XPIJzo8/
g79163dp0y9m7cDn4NfRDdBsFeHy6n+hKps6hSVf1z1ZtQtlfk0mRE/EchubDcuH
+QIDAQAB
-----END PUBLIC KEY-----";
$privateKeyString = “-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnV98v6RQR50Et
PNCspT7yir0hlJSujGGadatdrVcwa2Vt5UIdA2WO6OrAa4sQvKTuLvxwZzPALIYT
ZJWP2gi0HMafTZ9Zk0Jvdsc+/qh+WJO+phxk4VoVNYH61Mq46aikKT9uBBV7scLr
7viz/fFDi0zWNVs09hJjXX74MuMRDwpoDek0nCgVPERHcZUSCZ+GLnFRNNoFrlk4
ho1+wWvR8bO8ZuZGmqgiivoyVLFdsw7iTakzMHtglhivvNELbwOh4kKPledeSrhc
8gnOjz+Dv3Xrd2nTL2btwOfg19EN0GwV4fLqf6EqmzqFJV/XPVm1C2V+TSZET8Ry
G5sNy4f5AgMBAAECggEAd5rFiV/EmXs4yVVzLEI7OG1S+oJQtmTdieFaZuzyqUfJ
Sf+W/lekKb1ts7PpxD+gfiCVCt2oTk1EUu4MO7GxkNIUYF3Ba+tli3dQt0SaNxum
FZhyKOQsV4ZT7WxTrFBM2XAlxsMie7M0xx6ZIUR6QTV56IxgMP1DbUOw8UKlqlV2
p3Vdckfjt2pWyLqM2yZUoC3+AjfqpJus/dpyIRGtLd8rLoFCrPgM2naEWxYCAeyI
CpHgzYCCAbWyXZOkFOWIFPm53ZDbdZpupzKjS29rYGjiZ7St6sdCegGoZ+aYeUwA
Bb1RKZjkBeLrxbuIZHlSbrBO12yE8gZ+VPzgSy1CVQKBgQDWHjj/7Yur/m+d9yJ0
9S14TK5KX3EX2cl46It8FMJEKTk1IhgYB6Dmk10pDrV2glJ3zLfwYeu82p9Zgswh
F34mU3o67medJ3OJP+/qHYvEm4WOKw1973v8GEQhqTvr7yPYVC/cRoyN49FKbKfC
sF7Scw7EaTObxtWMDJyaa+JDPwKBgQDIE3DhYzx1YahEHktYgVw9OaDdykzYZV2J
KO8rkAwS0oXY6yi2J1nCrq3N5Ro7PAMCESRabgAps7n2GazLNfrtG/DcH87M0kYz
AEwo1DvI3XVIAjiPmZXBeU2xp1o40OOxZXeHP3VzuU2ydyR6yp3Y2WCClmgf3Vuz
O1uGk2A+xwKBgCZzbPcAuJldarvqWoS4Vr8Ivi/a7dtDn/uXfxz8OVq2MHDLO5pt
HEbr5cnuu0WZ56dd2xZO71+Nvxn69B9pMZ0+Vm/oyjCdmhDmq3XWcngPGa/LKXQZ
IqHF1c5ZrsoSutQpYiLjhHAinj4IPyQmOhD+2oMJBVyPG2A4D5Nnlk1PAoGBAIXH
ognC3hEqzGVH0F+Ml82EdBD5DOsA1Es7KLj7J2eKht7lVqJ9q2ImhKaQkzqaRPSj
26fvt4Iq36QzxLtYC8FxllrJlfCUhUXi5AnE53jGw33zpjg2nNDyOEYavZQR8L2U
OBkiEHnhpJc5XRYR1vvBVevbgCIWVBODFA7nCkrPAoGAK2oIQ5SLu5OfAB4qcN6v
vHERc8JXGZWL/o2Z/4t0OX1X6NwDdAl87LCyQ6ab3dqmgemtjdd2Z9DDn2m9oPtO
yuNvlxYNiCqgsNyUCwy6Q1yy1fOvhiUJF8rkq4UTSeQ8gSrf8hf3ajHmzhA1r5B7
Y5MUPUHIS6ckWMTF+pAXAgQ=
-----END PRIVATE KEY-----”;
openssl_pkey_get_public
和openssl_pkey_get_private
是PHP OpenSSL扩展提供的两个函数。
openssl_pkey_get_public
函数用于获取公钥,它可以从一个证书文件或PEM格式的公钥字符串中提取公钥信息,并返回一个公钥资源
$publicKeyResource = openssl_pkey_get_public($publicKeyString);
$privateKeyResource = openssl_pkey_get_private($privateKeyString);
第3种;复制密钥存储为.pem文件后缀
$publicKeyString = file_get_contents('public.pem');
$privateKeyString = file_get_contents('private.pem');
p
u
b
l
i
c
K
e
y
R
e
s
o
u
r
c
e
=
o
p
e
n
s
s
l
p
k
e
y
g
e
t
p
u
b
l
i
c
(
publicKeyResource = openssl_pkey_get_public(
publicKeyResource=opensslpkeygetpublic(publicKeyString);
p
r
i
v
a
t
e
K
e
y
R
e
s
o
u
r
c
e
=
o
p
e
n
s
s
l
p
k
e
y
g
e
t
p
r
i
v
a
t
e
(
privateKeyResource = openssl_pkey_get_private(
privateKeyResource=opensslpkeygetprivate(privateKeyString);
第三步、RSA加解密
RSA加密
公钥加密 openssl_public_encrypt
=> 私钥解密 openssl_private_decrypt
私钥加密 openssl_private_encrypt
=> 公钥解密 openssl_public_decrypt
1. 公钥加密、私钥解密:
- 使用公钥加密数据:发送方使用接收方的公钥对数据进行加密。
- 使用私钥解密数据:只有拥有相应私钥的接收方才能使用私钥解密并获取原始数据。
2. 私钥加密、公钥解密:
- 使用私钥加密数据:发送方使用自己的私钥对数据进行加密。
- 使用公钥解密数据:接收方使用发送方的公钥来解密并获取原始数据。
<?php
// 待加密的数据
$data = “Hello, RSA!”;
// 使用公钥加密数据
openssl_public_encrypt($data, $encryptedWithPublicKey, $publicKey);
// 使用私钥解密数据
openssl_private_decrypt($encryptedWithPublicKey, $decryptedWithPrivateKey, $privateKey);
// 使用私钥加密数据
openssl_private_encrypt($data, $encryptedWithPrivateKey, $privateKey);
// 使用公钥解密数据
openssl_public_decrypt($encryptedWithPrivateKey, $decryptedWithPublicKey, $publicKey);
// 输出结果
echo "原始数据: " . $data . “\n”;
echo "公钥加密,私钥解密结果: " . $decryptedWithPrivateKey . “\n”;
echo "私钥加密,公钥解密结果: " . $decryptedWithPublicKey . “\n”;
?>
第四步、RSA签名以及验证签名
/** * 构造签名 * @param string $dataString 被签名数据 * @return string */ public function sign($dataString) {
$signature = false; openssl_sign($dataString, $signature, $privKey); return base64_encode($signature); } /** * 验证签名 * @param string $dataString 被签名数据 * @param string $signString 已经签名的字符串 * @return number 1签名正确 0签名错误 */ public function verify($dataString, $signString) { $signature = base64_decode($signString); $flg = openssl_verify($dataString, $signature, $PubKey); return $flg; }</pre></div>
第五步、封装完整代码
<?php class RSA{ protected $publicKey; protected $privateKey; //$type 1长类型 2完整key 3文件内完整key public function __construct($publicKey = '', $privateKey = '', $type=1){ $this->setKey($publicKey, $privateKey, $type); }
public function setKey($publicKey = null, $privateKey = null, $type=1) { if (!is_null($publicKey)) { $this->setupPubKey($publicKey, $type); } if (!is_null($privateKey)) { $this->setupPrivKey($privateKey, $type); } } private function setupPrivKey($privateKey, $type) { if (is_resource($this->privateKey)) { return true; } if ($type == 1) { $pem = chunk_split($privateKey, 64, "\n"); $pem = "-----BEGIN PRIVATE KEY-----\n" . $pem . "-----END PRIVATE KEY-----\n"; $this->privateKey = openssl_pkey_get_private($pem); } elseif ($type == 2) { $this->privateKey = openssl_pkey_get_private($privateKey); } elseif ($type == 3) { $privateKeyString = file_get_contents($privateKey); $this->privateKey= openssl_pkey_get_private($privateKeyString); } return true; } private function setupPubKey($publicKey, $type=1) { if (is_resource($this->publicKey)) { return true; } if ($type == 1) { $pem = chunk_split($publicKey, 64, "\n"); $pem = "-----BEGIN PUBLIC KEY-----\n" . $pem . "-----END PUBLIC KEY-----\n"; $this->publicKey = openssl_pkey_get_public($pem); } elseif ($type == 2) { $this->publicKey= openssl_pkey_get_public($publicKey); } elseif ($type == 3) { $pubString = file_get_contents($publicKey); $this->publicKey= openssl_pkey_get_public($pubString); } return true; } public function privEncrypt($data) { if (!is_string($data) || empty($this->privateKey)) { return null; } $r = openssl_private_encrypt($data, $encrypted, $this->privateKey); if ($r === true) { return base64_encode($encrypted); } return null; } public function privDecrypt($encrypted) { if (!is_string($encrypted) || empty($this->privateKey)) { return null; } $encrypted = base64_decode($encrypted); $r = openssl_private_decrypt($encrypted, $decrypted, $this->privateKey); if ($r === true) { return $decrypted; } return null; } public function pubEncrypt($data) { if (!is_string($data) || empty($this->publicKey)) { return null; } $r = openssl_public_encrypt($data, $encrypted, $this->publicKey); if ($r === true) { return base64_encode($encrypted); } return null; } public function pubDecrypt($crypted) { if (!is_string($crypted) || empty($this->publicKey)) { return null; } $crypted = base64_decode($crypted); $r = openssl_public_decrypt($crypted, $decrypted, $this->publicKey); if ($r === true) { return $decrypted; } return null; } /** * 构造签名 * @param string $dataString 被签名数据 * @return string */ public function sign($dataString) { $signature = false; openssl_sign($dataString, $signature, $this->privateKey); return base64_encode($signature); } /** * 验证签名 * @param string $dataString 被签名数据 * @param string $signString 已经签名的字符串 * @return number 1签名正确 0签名错误 */ public function verify($dataString, $signString) { $signature = base64_decode($signString); $flg = openssl_verify($dataString, $signature, $this->publicKey); return $flg; } public function __destruct() { is_resource($this->privateKey) && @openssl_free_key($this->privateKey); is_resource($this->publicKey) && @openssl_free_key($this->publicKey); }
}
/$publicKey = ‘MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKZ1mKTymRoGKnHiP1xAy4aiyt5r0BscCZnDAonCrMFZ4kBGriPNHxEaLr5lfBnMKw7k6i+2dsFPSEZooTvqtPUCAwEAAQ==’;
$privateKey = ‘MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEApnWYpPKZGgYqceI/XEDLhqLK3mvQGxwJmcMCicKswVniQEauI80fERouvmV8GcwrDuTqL7Z2wU9IRmihO+q09QIDAQABAkBunx3nGHXYjppsfn++7iyTd+I7+Agfy/0xWyB3rpEiGGgfemjcRFaeq5SC2vUNXsrEOY5gbUSQmFxH//Cym18NAiEA1z1cZx/Q9cbIjFPwp1a+K5CVFDXDcfbi/AQgAkVs0/cCIQDF+2fr23AoBslcOC4S0yAx94AbgxCntYuRqztxybsrcwIgMW86ZcT87TX2oaQ1xXk6vC68zqN6fBZEE7Wu1Fa1pAkCIElmOJP3qfAc/AAlj+dIwLHlqWgJwl3674CU9Bfui2bDAiEA0CKJpF8x7KANCcopEQC93PsbIztuML322LOfDV1Lw/k=’;
r
s
a
=
n
e
w
R
S
A
(
rsa = new RSA(
rsa=newRSA(publicKey, $privateKey, 1);/
$publicKeyString = “-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp1ffL+kUEedBLTzQrKU+
8oq9IZSUroxhmnWrXa1XMGtlbeVCHQNljujqwGuLELyk7i78cGczwCyGE2SVj9oI
tBzGn02fWZNCb3bHPv6ofliTvqYcZOFaFTWB+tTKuOmopCk/bgQVe7HC6+74s/3x
Q4tM1jVbNPYSY11++DLjEQ8KaA3pNJwoFTxER3GVEgmfhi5xUTTaBa5ZOIaNfsFr
0fGzvGbmRpqoIor6MlSxXbMO4k2pMzB7YJYYr7zRC28DoeJCj5XnXkq4XPIJzo8/
g79163dp0y9m7cDn4NfRDdBsFeHy6n+hKps6hSVf1z1ZtQtlfk0mRE/EchubDcuH
+QIDAQAB
-----END PUBLIC KEY-----”;
p
r
i
v
a
t
e
K
e
y
S
t
r
i
n
g
=
"
−
−
−
−
−
B
E
G
I
N
P
R
I
V
A
T
E
K
E
Y
−
−
−
−
−
M
I
I
E
v
Q
I
B
A
D
A
N
B
g
k
q
h
k
i
G
9
w
0
B
A
Q
E
F
A
A
S
C
B
K
c
w
g
g
S
j
A
g
E
A
A
o
I
B
A
Q
C
n
V
98
v
6
R
Q
R
50
E
t
P
N
C
s
p
T
7
y
i
r
0
h
l
J
S
u
j
G
G
a
d
a
t
d
r
V
c
w
a
2
V
t
5
U
I
d
A
2
W
O
6
O
r
A
a
4
s
Q
v
K
T
u
L
v
x
w
Z
z
P
A
L
I
Y
T
Z
J
W
P
2
g
i
0
H
M
a
f
T
Z
9
Z
k
0
J
v
d
s
c
+
/
q
h
+
W
J
O
+
p
h
x
k
4
V
o
V
N
Y
H
61
M
q
46
a
i
k
K
T
9
u
B
B
V
7
s
c
L
r
7
v
i
z
/
f
F
D
i
0
z
W
N
V
s
09
h
J
j
X
X
74
M
u
M
R
D
w
p
o
D
e
k
0
n
C
g
V
P
E
R
H
c
Z
U
S
C
Z
+
G
L
n
F
R
N
N
o
F
r
l
k
4
h
o
1
+
w
W
v
R
8
b
O
8
Z
u
Z
G
m
q
g
i
i
v
o
y
V
L
F
d
s
w
7
i
T
a
k
z
M
H
t
g
l
h
i
v
v
N
E
L
b
w
O
h
4
k
K
P
l
e
d
e
S
r
h
c
8
g
n
O
j
z
+
D
v
3
X
r
d
2
n
T
L
2
b
t
w
O
f
g
19
E
N
0
G
w
V
4
f
L
q
f
6
E
q
m
z
q
F
J
V
/
X
P
V
m
1
C
2
V
+
T
S
Z
E
T
8
R
y
G
5
s
N
y
4
f
5
A
g
M
B
A
A
E
C
g
g
E
A
d
5
r
F
i
V
/
E
m
X
s
4
y
V
V
z
L
E
I
7
O
G
1
S
+
o
J
Q
t
m
T
d
i
e
F
a
Z
u
z
y
q
U
f
J
S
f
+
W
/
l
e
k
K
b
1
t
s
7
P
p
x
D
+
g
f
i
C
V
C
t
2
o
T
k
1
E
U
u
4
M
O
7
G
x
k
N
I
U
Y
F
3
B
a
+
t
l
i
3
d
Q
t
0
S
a
N
x
u
m
F
Z
h
y
K
O
Q
s
V
4
Z
T
7
W
x
T
r
F
B
M
2
X
A
l
x
s
M
i
e
7
M
0
x
x
6
Z
I
U
R
6
Q
T
V
56
I
x
g
M
P
1
D
b
U
O
w
8
U
K
l
q
l
V
2
p
3
V
d
c
k
f
j
t
2
p
W
y
L
q
M
2
y
Z
U
o
C
3
+
A
j
f
q
p
J
u
s
/
d
p
y
I
R
G
t
L
d
8
r
L
o
F
C
r
P
g
M
2
n
a
E
W
x
Y
C
A
e
y
I
C
p
H
g
z
Y
C
C
A
b
W
y
X
Z
O
k
F
O
W
I
F
P
m
53
Z
D
b
d
Z
p
u
p
z
K
j
S
29
r
Y
G
j
i
Z
7
S
t
6
s
d
C
e
g
G
o
Z
+
a
Y
e
U
w
A
B
b
1
R
K
Z
j
k
B
e
L
r
x
b
u
I
Z
H
l
S
b
r
B
O
12
y
E
8
g
Z
+
V
P
z
g
S
y
1
C
V
Q
K
B
g
Q
D
W
H
j
j
/
7
Y
u
r
/
m
+
d
9
y
J
09
S
14
T
K
5
K
X
3
E
X
2
c
l
46
I
t
8
F
M
J
E
K
T
k
1
I
h
g
Y
B
6
D
m
k
10
p
D
r
V
2
g
l
J
3
z
L
f
w
Y
e
u
82
p
9
Z
g
s
w
h
F
34
m
U
3
o
67
m
e
d
J
3
O
J
P
+
/
q
H
Y
v
E
m
4
W
O
K
w
1973
v
8
G
E
Q
h
q
T
v
r
7
y
P
Y
V
C
/
c
R
o
y
N
49
F
K
b
K
f
C
s
F
7
S
c
w
7
E
a
T
O
b
x
t
W
M
D
J
y
a
a
+
J
D
P
w
K
B
g
Q
D
I
E
3
D
h
Y
z
x
1
Y
a
h
E
H
k
t
Y
g
V
w
9
O
a
D
d
y
k
z
Y
Z
V
2
J
K
O
8
r
k
A
w
S
0
o
X
Y
6
y
i
2
J
1
n
C
r
q
3
N
5
R
o
7
P
A
M
C
E
S
R
a
b
g
A
p
s
7
n
2
G
a
z
L
N
f
r
t
G
/
D
c
H
87
M
0
k
Y
z
A
E
w
o
1
D
v
I
3
X
V
I
A
j
i
P
m
Z
X
B
e
U
2
x
p
1
o
40
O
O
x
Z
X
e
H
P
3
V
z
u
U
2
y
d
y
R
6
y
p
3
Y
2
W
C
C
l
m
g
f
3
V
u
z
O
1
u
G
k
2
A
+
x
w
K
B
g
C
Z
z
b
P
c
A
u
J
l
d
a
r
v
q
W
o
S
4
V
r
8
I
v
i
/
a
7
d
t
D
n
/
u
X
f
x
z
8
O
V
q
2
M
H
D
L
O
5
p
t
H
E
b
r
5
c
n
u
u
0
W
Z
56
d
d
2
x
Z
O
71
+
N
v
x
n
69
B
9
p
M
Z
0
+
V
m
/
o
y
j
C
d
m
h
D
m
q
3
X
W
c
n
g
P
G
a
/
L
K
X
Q
Z
I
q
H
F
1
c
5
Z
r
s
o
S
u
t
Q
p
Y
i
L
j
h
H
A
i
n
j
4
I
P
y
Q
m
O
h
D
+
2
o
M
J
B
V
y
P
G
2
A
4
D
5
N
n
l
k
1
P
A
o
G
B
A
I
X
H
o
g
n
C
3
h
E
q
z
G
V
H
0
F
+
M
l
82
E
d
B
D
5
D
O
s
A
1
E
s
7
K
L
j
7
J
2
e
K
h
t
7
l
V
q
J
9
q
2
I
m
h
K
a
Q
k
z
q
a
R
P
S
j
26
f
v
t
4
I
q
36
Q
z
x
L
t
Y
C
8
F
x
l
l
r
J
l
f
C
U
h
U
X
i
5
A
n
E
53
j
G
w
33
z
p
j
g
2
n
N
D
y
O
E
Y
a
v
Z
Q
R
8
L
2
U
O
B
k
i
E
H
n
h
p
J
c
5
X
R
Y
R
1
v
v
B
V
e
v
b
g
C
I
W
V
B
O
D
F
A
7
n
C
k
r
P
A
o
G
A
K
2
o
I
Q
5
S
L
u
5
O
f
A
B
4
q
c
N
6
v
v
H
E
R
c
8
J
X
G
Z
W
L
/
o
2
Z
/
4
t
0
O
X
1
X
6
N
w
D
d
A
l
87
L
C
y
Q
6
a
b
3
d
q
m
g
e
m
t
j
d
d
2
Z
9
D
D
n
2
m
9
o
P
t
O
y
u
N
v
l
x
Y
N
i
C
q
g
s
N
y
U
C
w
y
6
Q
1
y
y
1
f
O
v
h
i
U
J
F
8
r
k
q
4
U
T
S
e
Q
8
g
S
r
f
8
h
f
3
a
j
H
m
z
h
A
1
r
5
B
7
Y
5
M
U
P
U
H
I
S
6
c
k
W
M
T
F
+
p
A
X
A
g
Q
=
−
−
−
−
−
E
N
D
P
R
I
V
A
T
E
K
E
Y
−
−
−
−
−
"
;
/
/
privateKeyString = "-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnV98v6RQR50Et PNCspT7yir0hlJSujGGadatdrVcwa2Vt5UIdA2WO6OrAa4sQvKTuLvxwZzPALIYT ZJWP2gi0HMafTZ9Zk0Jvdsc+/qh+WJO+phxk4VoVNYH61Mq46aikKT9uBBV7scLr 7viz/fFDi0zWNVs09hJjXX74MuMRDwpoDek0nCgVPERHcZUSCZ+GLnFRNNoFrlk4 ho1+wWvR8bO8ZuZGmqgiivoyVLFdsw7iTakzMHtglhivvNELbwOh4kKPledeSrhc 8gnOjz+Dv3Xrd2nTL2btwOfg19EN0GwV4fLqf6EqmzqFJV/XPVm1C2V+TSZET8Ry G5sNy4f5AgMBAAECggEAd5rFiV/EmXs4yVVzLEI7OG1S+oJQtmTdieFaZuzyqUfJ Sf+W/lekKb1ts7PpxD+gfiCVCt2oTk1EUu4MO7GxkNIUYF3Ba+tli3dQt0SaNxum FZhyKOQsV4ZT7WxTrFBM2XAlxsMie7M0xx6ZIUR6QTV56IxgMP1DbUOw8UKlqlV2 p3Vdckfjt2pWyLqM2yZUoC3+AjfqpJus/dpyIRGtLd8rLoFCrPgM2naEWxYCAeyI CpHgzYCCAbWyXZOkFOWIFPm53ZDbdZpupzKjS29rYGjiZ7St6sdCegGoZ+aYeUwA Bb1RKZjkBeLrxbuIZHlSbrBO12yE8gZ+VPzgSy1CVQKBgQDWHjj/7Yur/m+d9yJ0 9S14TK5KX3EX2cl46It8FMJEKTk1IhgYB6Dmk10pDrV2glJ3zLfwYeu82p9Zgswh F34mU3o67medJ3OJP+/qHYvEm4WOKw1973v8GEQhqTvr7yPYVC/cRoyN49FKbKfC sF7Scw7EaTObxtWMDJyaa+JDPwKBgQDIE3DhYzx1YahEHktYgVw9OaDdykzYZV2J KO8rkAwS0oXY6yi2J1nCrq3N5Ro7PAMCESRabgAps7n2GazLNfrtG/DcH87M0kYz AEwo1DvI3XVIAjiPmZXBeU2xp1o40OOxZXeHP3VzuU2ydyR6yp3Y2WCClmgf3Vuz O1uGk2A+xwKBgCZzbPcAuJldarvqWoS4Vr8Ivi/a7dtDn/uXfxz8OVq2MHDLO5pt HEbr5cnuu0WZ56dd2xZO71+Nvxn69B9pMZ0+Vm/oyjCdmhDmq3XWcngPGa/LKXQZ IqHF1c5ZrsoSutQpYiLjhHAinj4IPyQmOhD+2oMJBVyPG2A4D5Nnlk1PAoGBAIXH ognC3hEqzGVH0F+Ml82EdBD5DOsA1Es7KLj7J2eKht7lVqJ9q2ImhKaQkzqaRPSj 26fvt4Iq36QzxLtYC8FxllrJlfCUhUXi5AnE53jGw33zpjg2nNDyOEYavZQR8L2U OBkiEHnhpJc5XRYR1vvBVevbgCIWVBODFA7nCkrPAoGAK2oIQ5SLu5OfAB4qcN6v vHERc8JXGZWL/o2Z/4t0OX1X6NwDdAl87LCyQ6ab3dqmgemtjdd2Z9DDn2m9oPtO yuNvlxYNiCqgsNyUCwy6Q1yy1fOvhiUJF8rkq4UTSeQ8gSrf8hf3ajHmzhA1r5B7 Y5MUPUHIS6ckWMTF+pAXAgQ= -----END PRIVATE KEY-----"; //
privateKeyString="−−−−−BEGINPRIVATEKEY−−−−−MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCnV98v6RQR50EtPNCspT7yir0hlJSujGGadatdrVcwa2Vt5UIdA2WO6OrAa4sQvKTuLvxwZzPALIYTZJWP2gi0HMafTZ9Zk0Jvdsc+/qh+WJO+phxk4VoVNYH61Mq46aikKT9uBBV7scLr7viz/fFDi0zWNVs09hJjXX74MuMRDwpoDek0nCgVPERHcZUSCZ+GLnFRNNoFrlk4ho1+wWvR8bO8ZuZGmqgiivoyVLFdsw7iTakzMHtglhivvNELbwOh4kKPledeSrhc8gnOjz+Dv3Xrd2nTL2btwOfg19EN0GwV4fLqf6EqmzqFJV/XPVm1C2V+TSZET8RyG5sNy4f5AgMBAAECggEAd5rFiV/EmXs4yVVzLEI7OG1S+oJQtmTdieFaZuzyqUfJSf+W/lekKb1ts7PpxD+gfiCVCt2oTk1EUu4MO7GxkNIUYF3Ba+tli3dQt0SaNxumFZhyKOQsV4ZT7WxTrFBM2XAlxsMie7M0xx6ZIUR6QTV56IxgMP1DbUOw8UKlqlV2p3Vdckfjt2pWyLqM2yZUoC3+AjfqpJus/dpyIRGtLd8rLoFCrPgM2naEWxYCAeyICpHgzYCCAbWyXZOkFOWIFPm53ZDbdZpupzKjS29rYGjiZ7St6sdCegGoZ+aYeUwABb1RKZjkBeLrxbuIZHlSbrBO12yE8gZ+VPzgSy1CVQKBgQDWHjj/7Yur/m+d9yJ09S14TK5KX3EX2cl46It8FMJEKTk1IhgYB6Dmk10pDrV2glJ3zLfwYeu82p9ZgswhF34mU3o67medJ3OJP+/qHYvEm4WOKw1973v8GEQhqTvr7yPYVC/cRoyN49FKbKfCsF7Scw7EaTObxtWMDJyaa+JDPwKBgQDIE3DhYzx1YahEHktYgVw9OaDdykzYZV2JKO8rkAwS0oXY6yi2J1nCrq3N5Ro7PAMCESRabgAps7n2GazLNfrtG/DcH87M0kYzAEwo1DvI3XVIAjiPmZXBeU2xp1o40OOxZXeHP3VzuU2ydyR6yp3Y2WCClmgf3VuzO1uGk2A+xwKBgCZzbPcAuJldarvqWoS4Vr8Ivi/a7dtDn/uXfxz8OVq2MHDLO5ptHEbr5cnuu0WZ56dd2xZO71+Nvxn69B9pMZ0+Vm/oyjCdmhDmq3XWcngPGa/LKXQZIqHF1c5ZrsoSutQpYiLjhHAinj4IPyQmOhD+2oMJBVyPG2A4D5Nnlk1PAoGBAIXHognC3hEqzGVH0F+Ml82EdBD5DOsA1Es7KLj7J2eKht7lVqJ9q2ImhKaQkzqaRPSj26fvt4Iq36QzxLtYC8FxllrJlfCUhUXi5AnE53jGw33zpjg2nNDyOEYavZQR8L2UOBkiEHnhpJc5XRYR1vvBVevbgCIWVBODFA7nCkrPAoGAK2oIQ5SLu5OfAB4qcN6vvHERc8JXGZWL/o2Z/4t0OX1X6NwDdAl87LCyQ6ab3dqmgemtjdd2Z9DDn2m9oPtOyuNvlxYNiCqgsNyUCwy6Q1yy1fOvhiUJF8rkq4UTSeQ8gSrf8hf3ajHmzhA1r5B7Y5MUPUHIS6ckWMTF+pAXAgQ=−−−−−ENDPRIVATEKEY−−−−−";//rsa = new RSA($publicKeyString, $privateKeyString, 2);
$rsa = new RSA(“public.pem”, “private.pem”, 3);
echo “私钥加密 公钥解密”;
echo “<br/>”;
$s = $rsa->privEncrypt(“abc”);
echo KaTeX parse error: Expected 'EOF', got '&' at position 5: rsa-&̲gt;pubDecrypt(s);
echo “<br/>”;
echo “公钥加密,私钥解密”;
echo “<br/>”;
$d = $rsa->pubEncrypt(“dfg”);
echo KaTeX parse error: Expected 'EOF', got '&' at position 5: rsa-&̲gt;privDecrypt(d);
echo “<br/>”;
echo “签名”;
echo “<br/>”;
$str=“a=1&b=2”;
s
i
g
n
=
sign=
sign=rsa->sign($str);
echo $sign;
r
e
s
6
=
res6=
res6=rsa->verify(
s
t
r
,
str,
str,sign);
echo “<br/>”;
echo “验证签结果:”.$res6;
以上就是PHP三种方式读取RSA密钥加解密、签名验签完整教程的详细内容,更多关于PHP RSA密钥的资料请关注网赚博客http://www.piaodoo.com/其它相关文章!
友情连接:
茂名一技http://www.szsyby.net/
茂名一技http://www.enechn.com/
美文集http://www.tpyjn.cn/
手游排行前十名http://www.bjkhrx.com/